在asp.net中使用SAML2.0进行SSO

时间:2012-05-29 07:31:01

标签: asp.net saml-2.0

我的要求是在asp.net中使用SAML2.0实现SSO。 我最终有2个供应商。想要将用户从一个站点传递到其他站点而无需登录到第二个站点。我之前从未使用过SAML2.0。  任何人都可以帮助我如何完成它。

5 个答案:

答案 0 :(得分:24)

首先让我们用标记格式区分协议。我假设您正在谈论协议而不是令牌格式。但以下是不同之处:

另一方面,您有一个场景,其中有多个身份提供者。 Wiktor建议的这本书(我共同撰写)在Federated Identity with Multiple Partners chapter上更详细地解释了这个场景。我建议你阅读它以获得身份联合背后的概念。让我给你一篇文章的简短版本和一些实现细节。有两种方法可以解决这个问题:

  • 在应用程序级别实现它。 WIF将允许您信任多个身份提供者令牌(这是通过X509证书完成的)。然后,您必须根据网址(例如https://idp1.yourapp.comhttps://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服务器)。

答案 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 中的用户。 我认为这可能是最适合你的衣服。干杯!!