代码之家  ›  专栏  ›  技术社区  ›  Bhushan Bhangale

如何在.NET中实现单点登录?

  •  6
  • Bhushan Bhangale  · 技术社区  · 15 年前

    在.NET应用程序中实现单一登录的最佳解决方案是什么?我在谷歌上找到了一些解决方案,但我对这些解决方案不是很信服。

    用户登录website1,然后移动到website2。网站2如何知道用户已登录?我想通过在URL中传递一些令牌,WebSite2将在数据库中检查它的有效性。这意味着我需要整理website1中指向website2的所有URL?

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

    6 回复  |  直到 7 年前
        1
  •  15
  •   blowdart    15 年前

    我想你误解了单点登录的工作原理。

    让我们考虑使用单一登录的website1和website2。

    登录网站在IdentityProvider上创建。这是唯一出现登录屏幕的地方。

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

    然后用户访问网站2并选择登录。WebSite2将用户跳转到IdentityProvider,后者已经知道用户是谁,如果用户选择保存登录信息,则会自动进行身份验证,然后使用WebSite2打开的另一个令牌重定向回WebSite2,然后执行自己的登录位。

    它周围有一堆安全性,将令牌限制在特定的网站上,只允许将令牌发送到白名单网站等。

    为了解决你的问题

    1. 用户登录website1,然后移动到website2。网站2如何知道用户已登录?没有。WebSite2必须首先从单一登录站点请求身份验证信息。
    2. 这意味着我需要整理website1中指向website2的所有URL?不,除非您使Website1也成为身份提供程序。即便如此,如果需要令牌,最好让WebSite2重定向回IdentityProvider。
    3. 其次,如果用户继续浏览website2,比如说1小时,然后转到website1。到那时,website1会话已经超时,用户将看到一个登录页面,不是吗?-这取决于您如何配置WebSite1,以及它的身份验证cookie的持续时间。
    4. 但是根据单点登录功能,这种行为是错误的。不,不是。单点登录并不意味着你得到一个浮动令牌,它在站点之间共享。使用单一登录的每个网站仍然创建自己的身份验证cookie。可能发生的情况是,如果用户返回到WebSite1,它会检测到一个过期的身份验证cookie,然后再次将用户发送到单一登录页,在该页上对其进行身份验证(静默),并将一个新令牌推回到WebSite1,WebSite1为自己创建一个新的身份验证cookie。
        2
  •  3
  •   Steve Gilham    15 年前

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

        3
  •  3
  •   Rob Kent andersra    15 年前

    我假设您不想在Active Directory等中使用Windows身份验证。一种方法是使用查询字符串上的安全令牌将一个经过身份验证的会话移交给另一个。

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

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

    通常,安全令牌包含一个用户ID和一个超时,登录检查程序返回用户ID,或者如果超时时间已过,返回空值。

    正确、安全地编码并不是一个快速的解决方案。也许你可以在代码项目上找到一个预建的?

        4
  •  1
  •   Karthikeyan VK    8 年前

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

    但是,我可以看到” 箱外单粒子群算法 来自Live、Google、Yahoo、Facebook等的服务,通过支持SAML提供认证。这将帮助我们摆脱维护自己的SSO服务实现的问题。

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

        5
  •  0
  •   Chris W    15 年前

    几年前,微软在企业内部做了一篇关于它的论文——我们建立了样本,但从未真正实现过。- Single Sign-on

        6
  •  0
  •   htm11h    7 年前

    通过使用OAuth和社会提供者查看此链接,它提供了许多已经融入.NET的身份验证功能。 Microsoft training video on OAuth and single sign on with social providers