C# ASP.NET 单点登录实现

95

作为我们下一个版本的一部分,我被赋予了为客户实现单点登录的任务。流程如下:

  1. 用户使用学校提供的学生ID/密码登录他/她所在学校的主门户系统。
  2. 用户单击链接到我的公司的产品。
  3. 用户自动跳转到仪表盘页面,就像他们刚刚通过我们网站上的登录表单登录一样。

因此,有两种机制可以使用户身份验证进入我们的网站:

  1. 访问我们产品的主页,并使用我们在本地系统中存储的电子邮件/密码进行登录。
  2. 使用单点登录,其中学生已经使用学生ID和密码登录到学校的主系统中。

如果我们的产品实现是ASP.NET(而不是Java/Ruby),那么我们应该使用CAS、JOSSO或其他第三方单点登录产品吗?还是有些适用于.NET环境的东西对我们这样的.NET公司来说更简单?


如果是标识提供者启动模型,这篇文章可能会有所帮助:IdP-Initiated asp.net web applications - Peter
5个回答

57

有多种方法可以为.NET应用程序实现单点登录。

在网上查看以下教程:

单点登录基础知识2012年7月

http://www.codeproject.com/Articles/429166/Basics-of-Single-Sign-on-SSO

GaryMcAllisterOnline: ASP.NET MVC 4, ADFS 2.0 and 3rd party STS集成(IdentityServer2)2013年1月

http://garymcallisteronline.blogspot.com/2013/01/aspnet-mvc-4-adfs-20-and-3rd-party-sts.html

第一个使用ASP.NET Web Forms,而第二个使用ASP.NET MVC4。

如果您的要求允许您使用第三方解决方案,请考虑OpenID。有一个名为 DotNetOpenAuth 的开源库。

有关更多信息,请阅读MSDN博客文章“使用通用提供程序将OpenAuth / OpenID与现有的ASP.NET应用程序集成”

希望这能帮到您!


1
谢谢您的帮助!不过我在想,是否已经存在预先存在的单点登录服务器,我可以使用它们来代替编写自己的实现呢?比如耶鲁大学的CAS之类的? - Adam Levitt
5
也许我漏看了什么,但第一个链接似乎相当无用。你只需黑客攻击查询字符串以绕过身份验证? - JohnOpincar
1
@JohnOpincar 这也是我的想法...对我来说似乎不太安全? - Tom Miller
1
我也在想同样的事情。SSO绝不应该是这样工作的! - user441521
1
那第一个链接非常粗糙。首先,无论他在哪里说“实时”,都用“真实世界”来替换它。最后,他暗示查询字符串中的魔术“IsAuthenticatedBySSO”应该被使用SAML令牌替换,而这将在随后的文章中进行描述。不幸的是,该用户的帐户已因“滥用或成为网络喷子”而被关闭。 - Nick Westgate
显示剩余3条评论

15

我来晚了,但对于选项#1,我会选择IdentityServer3(.NET 4.6或以下版本)或IdentityServer4(与Core兼容)。

您可以重用应用中现有的用户存储,并将其插入到 IdentityServer 的用户存储中。然后将客户端指向您的 IdentityServer 作为开放 id 提供者。


14

有几个身份提供者支持单点登录,其中一些是第三方服务。

** 第三方服务的唯一问题在于它们可能会按用户/月收费,这可能相当昂贵。

一些可用于 .NET 并具有 API 的工具包括:

如果您决定使用自己的实现,可以使用以下按编程语言分类的框架。

C#:

  • IdentityServer3(OAuth/OpenID协议,OWIN/Katana
  • IdentityServer4(OAuth/OpenID协议,ASP.NET Core
  • Okta的OAuth 2.0

JavaScript:

  • passport-openidconnect(node.js)
  • oidc-provider(node.js)
  • openid-client(node.js)

Python:

  • pyoidc
  • Django OIDC提供者

我会选择Auth0作为服务,因为它对前7000个用户免费,支持多种语言,并且不需要做太多工作。但是,如果您需要更强大,更便宜的解决方案,我建议配置IdentityServer4和ASP.NET Core应用程序,并根据需要添加身份验证提供程序。

Auth0和IdentityServer4解决方案都使用OAuth/OpenID协议,还支持WS-Federation和SAML 2.0集成。


8

[免责声明:我是其中一名贡献者]

我们开发了一个非常简单的免费/开源组件,用于为ASP.NET应用程序添加SAML支持 https://github.com/jitbit/AspNetSaml

基本上,这只是一个简短的C#文件,您可以将其添加到您的项目中(或通过Nuget安装),然后在您的应用程序中使用它。


2
非常感谢你。在整个网络上摸索了7天后,这是我找到的最简单的解决方案。再次感谢。 - Malik Khalil
3
@MalikKhalil 非常感谢!是的,我自己也曾经历过同样的困扰,这就是我写这个库的原因。 - Alex from Jitbit
2
这件事最好的一点是它为您提供了关于SAML实际工作原理的最基本概念。非常感谢您提供了可能最简单的源代码! - R. V.

2
UltimateSAML SSO是一个符合OASIS SAML v1.x和v2.0规范的.NET工具包。它提供了一种优雅且简单的方式,为您的ASP.NET、ASP.NET MVC、ASP.NET Core、桌面和服务应用程序添加支持单点登录和单点注销的SAML。这个轻量级库帮助您使用单个凭据条目为云和内部网站提供SSO访问。
详细的UltimateSAML SSO评论可以在这里找到:http://www.thedownloadplanet.com/reviews/review-saml-single-sign-on-for-asp-net/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接