【发布时间】:2012-06-03 10:06:15
【问题描述】:
我的要求是在 asp.net 中使用 SAML2.0 实现 SSO。 我确实有 2 个供应商。想要将用户从一个站点传递到另一个站点而不登录第二个站点。我以前从未使用过 SAML2.0。 谁能帮我看看我该怎么做。
【问题讨论】:
我的要求是在 asp.net 中使用 SAML2.0 实现 SSO。 我确实有 2 个供应商。想要将用户从一个站点传递到另一个站点而不登录第二个站点。我以前从未使用过 SAML2.0。 谁能帮我看看我该怎么做。
【问题讨论】:
首先让我们区分协议和令牌格式。我假设您在谈论协议而不是令牌格式。但以防万一,这里有区别:
另一方面,您有一个场景,其中有多个身份提供者。 Wiktor 建议的书(我合着)在Federated Identity with Multiple Partners chapter 上更详细地解释了这种情况。我建议您阅读它以了解身份联合背后的概念。让我给你这篇文章的简短版本和一些实现细节。有两种方法可以解决这个问题:
在应用程序级别实现它。 WIF 将允许您信任多个身份提供者令牌(这是通过 X509 证书完成的)。然后,您必须根据 url(如 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 服务器)。
【讨论】:
我们编写了一个非常简单的开源 C# 组件以用于 ASP.NET 应用程序:https://github.com/jitbit/AspNetSaml(包括代码示例)
它非常简短和基本,但这就是目标。无需添加庞大的第 3 方包,只需将一个简短的 C# 文件放入您的项目中,您就可以使用 SAML。这件事已经为我们工作了多年,即使在 .NET 3.x 上也是如此
[免责声明]我是贡献者之一。
附言。非常欢迎分叉和贡献。
【讨论】:
我建议您使用 Windows Identity Foundation 子系统,它可以简化处理基于 SAML 的身份验证。
这个主题相当广泛,所以你需要一本好手册,幸运的是,有一本免费的,来自 MS:
http://msdn.microsoft.com/en-us/library/ff423674.aspx
简而言之:要在两台服务器之间传递身份,其中一台应实现身份提供程序服务(安全令牌服务),第二台必须接受由第一台创建和签名的 SAML 令牌。
【讨论】:
我会推荐使用 ComponentSpace。它们提供了适用于 SAML 2.0 令牌和 SAML 2.0 协议的所有用例的库。 WIF 目前不支持 SAML 2.0 协议和令牌格式,但 CTP 除外。
【讨论】:
您可以为您的 asp.net 站点试用 miniOrange’s SAML SSO module。它实际上是一个 httpmodule,可以添加 SSO 作为 ASP.NET 站点的登录方法,这里的主要内容是它是一个非常简单的设置。该模块本身为 SSO 配置提供了一个管理控制台。它有助于保护我网站的私人页面不被公众访问,并且只允许我的客户用户访问存储在他的 AD 中。 我认为这可能是最适合你的。干杯!!
【讨论】: