我的要求是在asp.net中使用SAML2.0实现SSO。
我这边确实有 2 个供应商。想要将用户从一个站点传递到另一站点而不登录第二个站点。我以前从未使用过SAML2.0。
谁能帮我看看我该如何完成它。
首先让我们区分协议和令牌格式。我假设您正在谈论协议而不是令牌格式。但为了以防万一,这里有一些差异:
- SAML 2 令牌格式。这只是您的应用程序将支持的令牌的格式。 WIF 开箱即用地支持这一点。
- SAML 2 协议。这是您的应用程序必须理解才能在应用程序中获取令牌的 HTTP 交互。 WIF 不支持此功能,但您可以下载一个扩展(http://connect.microsoft.com/site1168/Downloads/DownloadDetails.aspx?DownloadID=36088 http://connect.microsoft.com/site1168/Downloads/DownloadDetails.aspx?DownloadID=36088)
另一方面,您有一个场景,其中有多个身份提供商。 Wiktor 建议的书(我与人合着)更详细地解释了这种情况与多个合作伙伴的联合身份章节 http://msdn.microsoft.com/en-us/library/hh446524。我建议您阅读它以了解身份联合背后的概念。让我给您提供本文的简短版本和一些实现细节。有两种方法可以解决这个问题:
-
在应用程序级别实现它。 WIF 将允许您信任多个身份提供商令牌(这是通过 X509 证书完成的)。然后,您必须根据 url 为每个身份提供商生成登录请求(例如https://idp1.yourapp.com https://idp1.yourapp.com or https://yourapp.com/idp1 https://yourapp.com/idp1)或用户选择(通过拥有一个带有两个链接的主页,每个链接对应一个身份提供商)。您还必须规范来自这些身份提供商的声明(也许其中一个会向您发送“name”声明,另一个会向您发送“upn”声明)。
YourApp --> Identity Provider 1
\-> Identity Provider 2
-
使用所谓的“联合提供者”。这是另一台将向您的应用程序颁发令牌的服务器,它将与您的身份提供商建立信任关系。您不必让您的应用程序信任两个身份提供商,而是只信任您的联合提供商,并且联合提供商将信任身份提供商。这是一条信任链。
YourApp --> Federation Provider --> Identity Provider 1
\-> Identity Provider 2
该架构允许您:
- 在不影响您的应用程序的情况下扩展您的身份提供商
- 如果您以后有第二个应用程序,您只需复制第一个应用程序的实现
- 您可以免费获得单点登录
- 你会得到一个声明转换引擎(如果你使用 ADFS 之类的东西)
- 如果您使用 ADFS 之类的东西,您将获得内置的 SAML 2 协议(而不必使用下面提到的扩展手动实现它)
当然,缺点是您现在需要维护其他东西(ADFS 服务器)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)