我的要求是在asp.net中使用SAML2.0实现SSO。 我最终有2个供应商。想要将用户从一个站点传递到其他站点而无需登录到第二个站点。我之前从未使用过SAML2.0。 任何人都可以帮助我如何完成它。
答案 0 :(得分:24)
首先让我们用标记格式区分协议。我假设您正在谈论协议而不是令牌格式。但以下是不同之处:
另一方面,您有一个场景,其中有多个身份提供者。 Wiktor建议的这本书(我共同撰写)在Federated Identity with Multiple Partners chapter上更详细地解释了这个场景。我建议你阅读它以获得身份联合背后的概念。让我给你一篇文章的简短版本和一些实现细节。有两种方法可以解决这个问题:
在应用程序级别实现它。 WIF将允许您信任多个身份提供者令牌(这是通过X509证书完成的)。然后,您必须根据网址(例如https://idp1.yourapp.com或https://yourapp.com/idp1)或用户选择(通过拥有两个链接的主页,每个身份提供者一个)生成对每个身份提供商的请求)。您还必须规范化来自这些身份提供者的声明(可能其中一个会向您发送“名称”声明而另一个声称为“upn”声明)。
YourApp --> Identity Provider 1
\-> Identity Provider 2
使用所谓的“联合提供者”。这是另一个向您的应用程序发出令牌的服务器,它将与您的身份提供商建立信任关系。您不再信任两个身份提供者,而是仅信任您的联盟提供者,而联邦提供者将信任身份提供者。这是一个信任链。
YourApp --> Federation Provider --> Identity Provider 1
\-> Identity Provider 2
此架构允许您:
当然缺点是你现在还有别的东西(ADFS服务器)。
答案 1 :(得分:6)
我建议您使用Windows Identity Foundation子系统,它简化了处理基于SAML的身份验证的过程。
主题相当广泛,所以你需要一本好的手册,幸运的是有一本免费的MS:
http://msdn.microsoft.com/en-us/library/ff423674.aspx
简而言之:要在两台服务器之间传递身份,其中一台应该实现身份提供商服务(安全令牌服务),第二台服务器必须接受由第一台服务器创建和签名的SAML令牌。
答案 2 :(得分:4)
我建议使用ComponentSpace。它们提供了适合SAML 2.0令牌和SAML 2.0协议的所有用例的库。除CTP外,WIF目前不支持SAML 2.0协议和令牌格式。
答案 3 :(得分:4)
我们编写了一个非常简单的开源C#组件,用于ASP.NET应用程序:https://github.com/jitbit/AspNetSaml(包括代码示例)
这是非常简短和基本的,但这是目标。而不是添加一个巨大的第三方软件包,只需将一个简短的C#文件放入您的项目中,您就可以使用SAML了。这件事对我们来说已经有好几年了,甚至在.NET 3.x
上也是如此[免责声明]我是贡献者之一。
PS。福克斯和贡献非常受欢迎。
答案 4 :(得分:0)
您可以为您的 asp.net 站点试用 miniOrange’s SAML SSO module。它实际上是一个 httpmodule,它可以添加 SSO 作为您的 ASP.NET 站点的登录方法,这里的主要内容是它是一个非常简单的设置。该模块本身为 SSO 配置提供了一个管理控制台。它有助于保护我网站的私人页面免受公共访问,并仅允许我的客户访问存储在他的 AD 中的用户。 我认为这可能是最适合你的衣服。干杯!!