7

我有一个在 IIS7 上构建和测试的 WCF Web 服务应用程序。关于身份验证,我想为访问 Web 服务中操作的消费者实现一个 sql server 托管的用户 ID 和密码身份验证。然而,有人告诉我,我的公司政策规定我将 SAML 实施到我的 Web 服务中。这意味着任何访问我的 Web 服务操作的客户端都需要使用 SAML 2.0 进行身份验证。我不熟悉 SAML,但想知道并开始了解如何在我的网络服务中实现它。我一直听到两个术语——服务提供者和身份提供者,基于网络上的定义,我假设服务提供者是我的网络服务。身份提供者是用户进行身份验证的地方,身份提供者向我的 Web 服务提供断言,然后我让客户端访问这些操作。我理解理论,但不确定如何投入实际实施。访问我的 Web 服务的客户端不是内部的,即它们是外部的(外部网络客户端),所以在这种情况下,身份提供者将是什么,我如何将代码添加到我的 Web 服务以使其成为服务提供者?

我希望你能理解我的困境,任何人都可以解释我需要采取的方法,并且非常感谢任何帮助我完成 Web 服务的示例或教程。

4

2 回答 2

4

我认为标准 WCF 不提供 SAML 2.0。要使其工作,您必须将 WCF 与WIF(Windows 身份基础)结合使用。在这里,您有一个非常复杂的使用 WCF 与 WIF 和基于声明的授权的示例。该示例使用 SAML 1.1,但它只是配置更改使其与 SAML 2.0 一起使用。

您的问题通常称为联合身份验证或联合身份,其中用户针对 STS(服务令牌服务)进行身份验证并接收安全令牌(例如 SAML 令牌)。比客户端调用真实服务(RP - 中继方)传递其安全令牌。那你要建什么?如果您的公司政策要求使用 SAML,他们很可能已经拥有 STS,您只需按照文章中提到的 SAML 令牌对客户端进行身份验证。

于 2011-09-04T12:02:31.673 回答
3

自 2011 年以来,随着 .NET 4.5 的发布,对 Claims-Aware WCF 服务的支持明显得到了改进。我会从那篇文章中复制信息以防万一它发生变化,但截至本答案发布时,该过程似乎很简单:

  1. Microsoft.IdentityModel.dll在 WCF 服务项目中添加对 WIF ( ) 的引用。由于这是随 .NET 4.5 提供的,因此我认为不需要 NuGet 包。

  2. 使用以下代码示例创建自托管的 Claims-Aware 服务:

    var host = new ServiceHost(typeof(ClaimsAwareWebService), new Uri("myUri")); FederatedServiceCredentials.ConfigureServiceHost(host);

    主机.打开();

  3. 将您的 WCF 服务设置为使用federatedServiceHostConfiguration行为扩展。

于 2016-01-08T15:33:51.677 回答