2012-03-06 128 views
7

我有一个Windows身份验证服务。使用以下代码,我可以获取(通过使用客户端)使用该服务的用户的Windows身份。了解WCF Windows身份验证

String currentUser = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name; 

在服务器的配置是:

<binding name="messageSecurity"> 
<security mode="Message"> 
<message clientCredentialType="Windows"/> 
</security> 
</binding> 

我也看了,在服务器,它使用Kerberos进行这个工作。现在

,我想了解它我们的企业网络中的意义。在办公室中,用户将使用他们的活动目录凭证登录到他们的桌面。我们的服务托管在名为“SERV1”的Windows服务器中。

  1. 是否只有有权访问(登录)“SERV1”的用户才能访问该服务?或者所有能够登录到办公网络的用户(启用活动目录凭证)都能够使用该服务?

  2. 有没有一种方法,以确保只有CIO批准的应用程序将要访问的服务,保持服务为窗口认证?

  3. 这是否验证检查发生的每个服务操作调用或只对第一个电话?

  4. 是否有任何方式的服务将能够知道用户的Windows凭据?

注意:我所了解的是WindowsAuthentication可以与会员提供商进行比较 - 从集中位置提供用户名和密码。它可以与ASP.Net成员资格提供程序或Active Directory成员资格提供程序进行比较。

进一步阅读:

  1. ASP.NET Active Directory Membership Provider and SQL Profile Provider

  2. wcf data contracts authorization

  3. http://www.theserverside.net/tt/articles/showarticle.tss?id=ClaimsBasedSecurityModel

+2

下面是一个非常好的帖子,它说明了如何使用AD组来限制对服务的访问:http://stackoverflow.com/a/5136551/29407 – 2012-03-06 18:02:03

+0

@Darin。谢谢。我希望这个链接是针对我的第二个问题。你能回答其他问题吗?另外(对于问题2),我并不试图根据角色限制访问;但客户端。 – Lijo 2012-03-06 18:46:29

回答

9

只能谁拥有访问权限的用户(登录),以“SERV1”访问该服务?

是 - 这是一个WCF服务使用Windows凭据点。只有在该Active Directory域中拥有域帐户的用户(或与您的域具有双向完全信任关系的独立域)才能够访问该服务。

或所有用户谁能够登录到办公网络(起诉Active Directory凭据)将能够使用该服务?

的WCF安全边界是Active Directory域 - 而不是一个特定的服务器。

有没有一种方法,以确保只有CIO批准的应用程序将要访问的服务,保持服务为窗口认证?

如何是那些 “CIO批准的” 应用程序和别人不一样? WCF通过帐户访问 - 通常是用户帐户。您可以限制哪些帐户可以访问您的服务(例如,通过要求这些帐户成为特定AD组的成员)。你不能真正“极限”的基础上的应用程序(仅当这些应用程序使用特定的应用程序级的帐户来访问您的WCF服务)

此认证检查是否发生针对每个服务操作调用或只对第一呼叫?

取决于服务 - 如果你使用每次呼叫 WCF服务,然后检查会为每个呼叫。如果您使用每会话开启“安全协商”的WCF服务,那么检查会在会话开始时发生一次,直到会话结束才会发生。

有任何方式的服务将能够知道用户的Windows凭据?

是 - OperationContext.Current.ServiceSecurityContext.WindowsIdentityIS Windows凭据(Windows标识)用于调用服务。这不仅仅是用户名.....

+0

感谢您的明确解释。关于ServiceSecurityContext.WindowsIdentity的一个问题。我可以得到用户的名字和其他细节。但是我能够知道用户的密码吗? – Lijo 2012-03-07 05:35:20

+2

@Lijo:** NO ** - 在Windows中有** NO **方式来检索用户的密码。 – 2012-03-07 05:52:57

+0

谢谢。这使我们的讨论完成。我将其标记为已回答。 – Lijo 2012-03-07 06:13:08

2
  1. 这不是一个认证任务,这是一个授权任务。 Kerberos负责确保用户通过身份验证(您获得的名称是他们的真实姓名)。 LDAP管理授权。在Windows环境中,这意味着用户应该是某些允许访问服务器的组成员(并且服务必须检查是否属于这种情况)。

  2. 应用程序?不是真的。也就是说,在Active Directory中有两种经过身份验证的委托人:用户和计算机。但是,如果执行运行的用户有权连接到服务,那么为什么它运行的是什么应用程序呢?换句话说,你不能阻止某人使用他们自己的代码来完成你的代码的功能。

  3. 应该没关系。验证正在工作,不是?实际发生的情况是,应用程序正在通过一张票证明用户已经过身份验证(对KDC,即活动目录服务器)。

  4. 是的,安全上下文,在某种意义上,是用户的凭证集。他们也可能拥有其他凭据,但您也可以获得这些凭据。