我在IIS7上构建并测试了WCF Web服务应用程序。关于身份验证,我想为访问Web服务中的操作的消费者实现sql server托管的用户ID和密码身份验证。但是我被告知我的公司政策要求我将SAML实施到我的网络服务中。这意味着任何访问我的Web服务操作的客户端都需要使用SAML 2.0进行身份验证。我不熟悉SAML,但想知道并开始如何在我的网络服务中实现它。我一直听到两个术语 - 服务提供商和身份提供商,根据网络上的定义,我假设服务提供商是我的网络服务。身份提供程序是用户进行身份验证的位置,身份提供程序向我的Web服务提供断言,然后让客户端访问操作。我理解这个理论但不确定如何投入实际实施。访问我的Web服务的客户端不是内部的,即它们是外部的(外部网客户端),因此在这种情况下,身份提供者将是什么以及如何将代码添加到我的Web服务中以使其成为服务提供者?
我希望您理解我的困境,任何人都可以解释我需要采取的方法,并且非常感谢任何帮助我完成网络服务的示例或教程。
答案 0 :(得分:4)
我认为标准WCF不提供SAML 2.0。要使其工作,您必须将WCF与WIF(Windows身份基础)结合使用。在这里,您有very complex example使用WCF和WIF以及基于声明的授权。该示例使用SAML 1.1,但只有配置更改才能使其与SAML 2.0一起使用。
您的问题通常称为联合身份验证或联合身份,其中用户针对STS(服务令牌服务)进行身份验证,并且它接收安全令牌(例如,它可以是SAML令牌)。比客户端调用真实服务(RP - 中继方)通过其安全令牌。那么你打算建造什么?如果您的公司政策要求SAML使用,他们很可能已经拥有STS,您只需要通过SAML令牌对客户端进行身份验证,如文章中所述。
答案 1 :(得分:3)
自2011年以来,随着.NET 4.5的发布,对于声明感知WCF服务的支持已经apparently improved。我将从该文章中复制信息,以防它发生变化,但截至本答复时,该过程似乎很简单:
在WCF服务项目中添加对WIF(Microsoft.IdentityModel.dll
)的引用。由于这是随.NET 4.5提供的,我不相信NuGet包是必需的。
使用以下代码示例创建自托管的Claims-Aware服务:
var host = new ServiceHost(typeof(ClaimsAwareWebService),new Uri(" myUri")); 的 FederatedServiceCredentials.ConfigureServiceHost(主机); 强>
host.Open();
将您的WCF服务设置为使用federatedServiceHostConfiguration
行为扩展。