使用SAML 2.0在C#中实现单点登录

10
过去一周,我对使用SAML 2.0进行单点登录进行了大量研究。我发现了许多好的文章,并且详细了解了SSO的过程,但是在我们的基于.Net Framework 4.5的C#解决方案中实施时遇到了问题。
让我描述一下我的理解过程以及如何应用它:
  1. 用户进入我们的软件,这是服务提供商(SP)。我们有为客户需求量身定制的不同实例。

  2. 输入电子邮件地址后,他将被重定向到我们的身份提供者(IdP)。此时,我相信我应该发送一个身份验证令牌来检查用户是否已经在IdP上登录。如果用户已经登录,我想要将用户登录到我们的系统。如果没有,他将在其IdP上登录。

  3. 成功验证后,我们将SAML响应令牌发送回我们的网站URL。
  4. 当令牌到达我们这里时,我们应该对其进行解密,在身份验证成功时,授予用户访问服务的权限。
到目前为止,我还没有找到任何有关生成SAML请求的实际流程或在C#代码中解密SAML token的方法的好资源。
对于测试,我们使用ADFS 2.0作为IdP,并从中获取SAML响应。当我们处理响应时,我们希望将数据库中的信息与响应中的电子邮件进行比较,以在允许用户进入系统之前验证其详细信息。
我能够找到的示例要么过时,要么没有提供详细的解释。如果有人能够为我提供实现示例或我尚未找到的好的和最新的资源,那将是非常有帮助的。

请查看以下这些帖子:C# ASP.NET单点登录实现使用SAML2.0在ASP.NET中实现SSO - StackUseR
也许这有些偏题,但很多人开始认为SAML是Web SSO中“遗留”的协议,而oauth/openid connect则更受青睐。如果你从头开始构建,选择后者可能更具备未来性。 - snow_FFFFFF
1个回答

15

SAML 2.0不是一个简单的协议,正如您所发现的那样,自己实现起来并不容易。

使用SAML客户端堆栈。

请注意,微软没有官方的客户端堆栈。

请参考SAML:SAML连接/工具包以获取一些想法。

这将为您完成所有繁重的工作和管道工作。


1
为什么要踩我?使用SAML堆栈可以解决这个问题。它会为您进行编码/加密。或者查看源代码以获取指导。 - rbrayb

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