在 asp.net 中使用 SAML 2.0 的 SSO

Posted

技术标签:

【中文标题】在 asp.net 中使用 SAML 2.0 的 SSO【英文标题】:SSO using SAML2.0 in asp.net 【发布时间】:2012-06-03 10:06:15 【问题描述】:

我的要求是在 asp.net 中使用 SAML2.0 实现 SSO。 我确实有 2 个供应商。想要将用户从一个站点传递到另一个站点而不登录第二个站点。我以前从未使用过 SAML2.0。 谁能帮我看看我该怎么做。

【问题讨论】:

【参考方案1】:

首先让我们区分协议和令牌格式。我假设您在谈论协议而不是令牌格式。但以防万一,这里有区别:

SAML 2 令牌格式。这只是您的应用程序将接受的令牌格式。 WIF 开箱即用地支持这一点。 SAML 2 协议。这是您的应用程序必须了解的 HTTP 交互才能在应用程序中获取令牌。 WIF 不支持此功能,但您可以下载一个扩展程序 (http://connect.microsoft.com/site1168/Downloads/DownloadDetails.aspx?DownloadID=36088)

另一方面,您有一个场景,其中有多个身份提供者。 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 之类的工具) 如果您使用 ADFS 之类的东西,您将获得内置的 SAML 2 协议(而不必使用下面提到的扩展手动实现它)

当然,缺点是您现在需要维护其他东西(ADFS 服务器)。

【讨论】:

如此精彩的总结。谢谢你。出乎意料地很难找到它浓缩到这一点。【参考方案2】:

我们编写了一个非常简单的开源 C# 组件以用于 ASP.NET 应用程序:https://github.com/jitbit/AspNetSaml(包括代码示例)

它非常简短和基本,但这就是目标。无需添加庞大的第 3 方包,只需将一个简短的 C# 文件放入您的项目中,您就可以使用 SAML。这件事已经为我们工作了多年,即使在 .NET 3.x 上也是如此

[免责声明]我是贡献者之一。

附言。非常欢迎分叉和贡献。

【讨论】:

【参考方案3】:

我建议您使用 Windows Identity Foundation 子系统,它可以简化处理基于 SAML 的身份验证。

这个主题相当广泛,所以你需要一本好手册,幸运的是,有一本免费的,来自 MS:

http://msdn.microsoft.com/en-us/library/ff423674.aspx

简而言之:要在两台服务器之间传递身份,其中一台应实现身份提供程序服务(安全令牌服务),第二台必须接受由第一台创建和签名的 SAML 令牌。

【讨论】:

感谢 Wiktor Zychla 为您提供宝贵的 cmets。让我看看这个。【参考方案4】:

我会推荐使用 ComponentSpace。它们提供了适用于 SAML 2.0 令牌和 SAML 2.0 协议的所有用例的库。 WIF 目前不支持 SAML 2.0 协议和令牌格式,但 CTP 除外。

【讨论】:

@Ravia - 你能提供任何它说它可用的链接吗?据我所知,看到这个链接 - connect.microsoft.com/site1168/Downloads/… 它是 CTP 版本而不是 RTM。【参考方案5】:

您可以为您的 asp.net 站点试用 miniOrange’s SAML SSO module。它实际上是一个 httpmodule,可以添加 SSO 作为 ASP.NET 站点的登录方法,这里的主要内容是它是一个非常简单的设置。该模块本身为 SSO 配置提供了一个管理控制台。它有助于保护我网站的私人页面不被公众访问,并且只允许我的客户用户访问存储在他的 AD 中。 我认为这可能是最适合你的。干杯!!

【讨论】:

以上是关于在 asp.net 中使用 SAML 2.0 的 SSO的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net mvc Web 应用程序中集成第三方应用程序的 SAML SSO

ASP.Net Core SAML 身份验证

SAML 与 ASP.NET Core 身份的集成

ASP NET API - 在不打开 Microsoft 登录页面的情况下使用 Azure AD SAML 协议对用户进行身份验证

使用 OpenSAML 在 Java 中使用 SAML 2.0 解密加密断言

在 C# .NET 4.5 中使用 SAML 2.0