6

在 .net 应用程序中实现单点登录的最佳解决方案是什么?我用谷歌搜索并找到了很少的解决方案,但我对这些解决方案不太相信。

用户登录 website1,然后移动到 website2。website2如何知道用户已经登录?我想通过在 url 中传递一些令牌,website2 将在数据库中检查其有效性。这意味着我需要将 website1 中的所有 url 编组到 website2?

其次,如果用户继续浏览 website2 1 小时,然后移动到 website1。到那时 website1 会话已经超时,所以用户会看到一个登录页面,不是吗?但是根据单点登录功能,这种行为是错误的。

4

6 回答 6

15

我认为您误解了单点登录的工作原理。

让我们考虑想要使用单点登录的 website1 和 website2。

在 identityProvider 处创建一个登录网站。这是唯一出现登录屏幕的地方。

当用户访问 website1 并选择登录 website1 时,会将用户发送到 identityProvider 的登录屏幕。用户登录到 identityProvider ,它会为其域删除自己的登录 cookie(并且可能允许用户保存他们的身份验证信息,这样他们就不会再收到提示了)。然后它将浏览器重定向回 website1,包括请求中的令牌,website1 会打开该令牌,从中获取身份信息并执行它自己的登录位(丢弃它自己的身份验证 cookie,它可以持续使用它想要的任何时间)。

然后用户访问website2并选择登录。Website2 将用户退回到 identityProvider,后者已经知道用户是谁,如果他们的用户选择保存他们的登录信息,则会静默进行身份验证,然后使用另一个令牌重定向回 website2,website2 会打开该令牌,然后执行自己的登录位。

它周围有很多安全措施,将令牌限制在特定网站上,只允许将令牌发送到白名单网站等。

所以为了解决你的担忧

  1. 用户登录 website1,然后移动到 website2。website2如何知道用户已经登录?它没有。website2 必须首先从单点登录站点请求身份验证信息。
  2. 这意味着我需要将 website1 中的所有 url 编组到 website2?不,除非您也将 website1 设为身份提供者。即便如此,那也会很痛苦,如果需要令牌,最好让 website2 重定向回身份提供者。
  3. 其次,如果用户继续浏览 website2 1 小时,然后移动到 website1。到那时 website1 会话已经超时,所以用户会看到一个登录页面,不是吗?- 这取决于您如何配置 website1,以及它的身份验证 cookie 持续多长时间。
  4. 但是根据单点登录功能,这种行为是错误的。不,这不对。单点登录并不意味着您获得了在站点之间共享的浮动令牌。每个使用单点登录的网站仍会创建自己的身份验证 cookie。可能发生的情况是,如果用户返回到 website1,它会检测到过期的身份验证 cookie,然后再次将用户发送到单点登录页面,在该页面上对他们进行身份验证(静默),并将新令牌推送回 website1,从而创建一个新的自己的身份验证cookie。
于 2009-07-31T11:07:45.987 回答
3

Microsoft 的官方方法是通过 Active Directory 联合服务(将 SAML 与 AD 身份验证包装在一起)。这具有您正在寻找的特性——但对于公共 Web 应用程序来说可能太重了。

于 2009-07-31T09:24:14.447 回答
3

我假设您不想将 Windows 身份验证与 Active Directory 等一起使用。一种方法是使用查询字符串上的安全令牌从一个经过身份验证的会话移交给另一个,正如您所描述的。

两个应用程序都使用相同的公共加密密钥来编码/解码安全令牌。正如您所说,如果您在站点之间具有有限的预定义转换链接,则此方法可以正常工作,但是如果您希望能够在应用程序之间使用任何页面链接,则需要动态生成这些 url,以便它们包含令牌。

您处理超时的方式是安全令牌还包含到期时间。每个页面请求或在应用程序之间创建新链接时,您都会生成一个新的安全令牌。

通常,安全令牌包含用户 ID 和超时,如果超时已过期,登录检查器要么返回用户 ID,要么返回 null。

这不是正确安全地编码的快速解决方案。也许你可以在 Code Project 上找到一个预建的?

于 2009-07-31T09:26:34.397 回答
0

几年前,MS 在企业内部做了一篇关于它的论文——我们设置了样本,但从未真正实施过——单点登录

于 2009-07-31T09:20:43.270 回答
0

您可以根据您的应用程序为不同的应用程序使用不同的 SSO 机制。

但是,我可以看到 Live、Google、Yahoo、Facebook 等提供的“开箱即用 SSO ”服务通过支持 SAML 来提供身份验证。这将帮助我们摆脱维护我们自己的 SSO 服务实现的问题。

如果您需要基本了解 SSO 的工作原理,您可以参考这里

于 2013-11-04T12:05:22.517 回答
0

使用 OAuth 和社交提供商查看此链接,它提供了多种身份验证功能,这些功能已经融入 .Net Microsoft OAuth 培训视频和社交提供商的单点登录

于 2017-06-06T13:38:49.967 回答