了解WCF Windows身份validation

我有一个与Windows身份validation服务。 使用下面的代码,我可以获得(通过使用客户端)使用该服务的用户的Windows身份。

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

服务器中的configuration是:

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

我也读过,在服务器上,它正在使用Kerberos进行工作。

现在,我正在试图了解它在我们公司networking中的意义。 在办公室中,用户将使用其活动目录凭证login到他们的桌面。 我们的服务托pipe在名为“SERV1”的Windows服务器中。

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

  2. 有没有办法确保只有首席信息官批准的应用程序将访问服务,保持服务为Windowsauthentication?

  3. 这个validation检查是针对每个服务操作调用发生还是仅针对第一次调用?

  4. 有什么办法的服务将能够知道用户的Windows凭据?

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

进一步阅读:

  1. ASP.NET Active Directory成员资格提供程序和SQL Profile Provider

  2. wcf数据合同授权

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

只有有权访问(login)“SERV1”的用户才能访问该服务?

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

或者所有能够login到办公室networking的用户(启动活动目录凭证)都能够使用该服务?

WCF安全边界是Active Directory域 – 不是特定的服务器。

有没有办法确保只有首席信息官批准的应用程序将访问服务,保持服务为Windowsauthentication?

那些“CIO认可的”应用程序与其他应用程序有何不同? WCF由帐户访问 – 通常是用户帐户。 您可以限制哪些帐户可以访问您的服务(例如,要求这些帐户成为特定AD组的成员)。 您不能基于应用程序真正“限制”(仅当这些应用程序使用特定的应用程序级帐户访问您的WCF服务时)

这个validation检查是针对每个服务操作调用发生还是仅针对第一次调用?

取决于你的服务 – 如果你使用每个通话的 WCF服务,那么检查发生在每个电话。 如果您在启用“安全协商”的情况下使用每个会话的 WCF服务,则检查会在会话开始时发生一次,直到会话结束。

有什么办法的服务将能够知道用户的Windows凭据?

是 – OperationContext.Current.ServiceSecurityContext.WindowsIdentity 用于调用服务的Windows凭据(Windows标识)。 这不仅仅是用户名…..

  1. 这不是一个authentication任务,这是一个授权任务。 Kerberos负责确保用户通过身份validation(您获得的名称是他们的实际名称)。 LDAPpipe理授权。 在Windows环境下,这意味着用户应该是一些允许访问服务器的东西组的成员(并且服务必须检查是否是这种情况)。

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

  3. 应该不重要。 validation正在工作,不是? 实际发生的事情是应用程序正在通过一张票certificate用户已经validation(对KDC,即活动目录服务器)。

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