我的要求是在asp.net中使用SAML2.0实现SSO.我最终有2个供应商.想要将用户从一个站点传递到其他站点而无需登录到第二个站点.我之前从未使用过SAML2.0.任何人都可以帮助我如何完成它.
wol*_*ski 27
首先让我们用标记格式区分协议.我假设您正在谈论协议而不是令牌格式.但以防万一是差异:
另一方面,您有一个场景,其中有多个身份提供者.Wiktor建议的这本书(我与他人共同撰写)更详细地解释了" 与多个合作伙伴的联合身份"一章.我建议你阅读它以获得身份联合背后的概念.让我给你一篇文章的简短版本和一些实现细节.有两种方法可以解决这个问题:
在应用程序级别实现它.WIF将允许您信任多个身份提供者令牌(这是通过X509证书完成的).然后,您必须根据网址(如https://idp1.yourapp.com或https://yourapp.com/idp1)或用户选择(通过设置主页,为每个身份提供商生成登录请求)两个链接,每个标识提供一个链接).您还必须规范化来自这些身份提供者的声明(可能其中一个将向您发送"名称"声明,另一个声明为"upn"声明).
YourApp --> Identity Provider 1
\-> Identity Provider 2
Run Code Online (Sandbox Code Playgroud)使用所谓的"联合提供者".这是另一个向您的应用程序发出令牌的服务器,它将与您的身份提供商建立信任关系.您不再信任两个身份提供者,而是仅信任您的联盟提供者,而联邦提供者将信任身份提供者.这是一个信任链.
YourApp --> Federation Provider --> Identity Provider 1
\-> Identity Provider 2
Run Code Online (Sandbox Code Playgroud)这种架构允许您:
当然,缺点是你现在还有别的东西(ADFS服务器).
我建议您使用Windows Identity Foundation子系统,它简化了处理基于SAML的身份验证的过程.
这个主题相当广泛,所以你需要一本好的手册,幸运的是有一本免费的MS:
http://msdn.microsoft.com/en-us/library/ff423674.aspx
简而言之:要在两个服务器之间传递身份,其中一个应该实现身份提供者服务(安全令牌服务),第二个必须接受由第一个创建和签名的SAML令牌.
我们编写了一个非常简单的开源C#组件以与ASP.NET应用程序一起使用:https : //github.com/jitbit/AspNetSaml(包括代码示例)
它非常简短且基本,但这就是目标。无需添加庞大的第三方软件包,只需将一个简短的C#文件放入您的项目中即可使用SAML。即使在.NET 3.x上,这件事已经为我们工作了很多年。
[免责声明]我是撰稿人之一。
PS。叉和贡献是非常欢迎的。