了解WCF Windows身份验证

本文关键字:身份验证 Windows WCF 了解 | 更新日期: 2023-09-27 18:27:00

我有一个带有windows身份验证的服务。使用以下代码,我可以获得(通过使用客户端)使用该服务的用户的Windows标识。

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

服务器中的配置为:

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

我还读到,在服务器中,它使用Kerberos来实现这一点。

现在,我正在努力理解它在我们公司网络中的意义。在办公室里,用户将使用他们的active directory凭据登录到他们的桌面。我们的服务托管在一个名为"SERV1"的windows服务器中。

  1. 是否只有能够访问(登录)"SERV1"的用户才能访问该服务?或者所有能够登录到办公网络(使用active directory凭据)的用户都可以使用该服务?

  2. 是否有办法确保只有首席信息官批准的应用程序才能访问该服务,并将该服务作为窗口进行身份验证?

  3. 这种身份验证检查是针对每个服务操作调用还是仅针对第一个调用?

  4. 有什么方法可以让服务知道用户的windows凭据吗?

注意:据我所知,WindowsAuthentication可以被比作会员资格提供商——从集中位置提供用户名和密码。它可以与ASP.Net成员资格提供程序或Active Directory成员资格提供器进行比较。

进一步阅读:

  1. ASP.NET Active Directory成员资格提供程序和SQL配置文件提供程序

  2. wcf数据合同授权

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

了解WCF Windows身份验证

只有有权(登录)"SERV1"的用户才能访问该服务吗

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

或者所有能够登录到办公网络(使用active directory凭据)的用户都可以使用该服务

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

是否有办法确保只有首席信息官批准的应用程序才能访问该服务,并将该服务保持为windows身份验证

这些"首席信息官批准"的应用程序与其他应用程序有何不同?WCF由帐户访问,通常是用户帐户。您可以限制哪些帐户可以访问您的服务(例如,要求这些帐户是给定AD组的成员或其他)。您不能真正基于应用程序进行"限制"(仅当这些应用程序使用特定的应用程序级别帐户访问WCF服务时)

此身份验证检查是针对每个服务操作调用还是仅针对第一个调用

取决于您的服务-如果每次调用使用WCF服务,则会对每次调用进行检查。如果您在启用"安全协商"的情况下使用每个会话WCF服务,则在会话开始时会进行一次检查,直到会话结束时才会进行检查。

有什么方法可以让服务知道用户的windows凭据吗

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

  1. 这不是身份验证任务,而是授权的任务。Kerberos负责确保用户经过身份验证(您为他们获得的名称是他们的实际名称)。LDAP管理授权。在Windows上下文中,这意味着用户应该是某个允许访问服务器的组的成员(并且服务必须检查是否存在这种情况)。

  2. 应用程序?不是。也就是说,Active Directory中有两种类型的经过身份验证的主体:用户和计算机。但是,如果运行的用户有权连接到服务,那么运行什么应用程序又有什么关系呢?换句话说,你无法阻止某人使用自己的代码来做你的代码会做的事情。

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

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