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

时间:2009-07-31 09:03:43

标签: .net single-sign-on multiple-sites

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

用户登录网站1,然后移至website2。 website2如何知道用户已登录?我想通过在URL中传递一些令牌,这些令牌将由website2在数据库中检查有效性。这意味着我需要编组网站1中的所有网址到网站2?

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

6 个答案:

答案 0 :(得分:15)

我认为你误解了单点登录是如何运作的。

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

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

当用户访问website1并选择登录website1时,会将用户发送到identityProvider的登录屏幕。用户登录到identityProvider,它会为其域删除自己的登录cookie(并且可能允许用户保存他们的身份验证信息,以免再次提示他们)。然后它将浏览器重定向回到website1,包括请求中的一个令牌,网站1打开,获取身份信息并执行它自己的登录位(删除它自己的身份验证cookie,无论它想要什么)。

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

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

所以解决您的问题

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

答案 1 :(得分:3)

Microsoft的官方方法是通过Active Directory联合身份验证服务(使用AD身份验证包装SAML)。这具有您正在寻找的特征 - 但对于公共Web应用程序而言可能过于重量级。

答案 2 :(得分:3)

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

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

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

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

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

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

几年前,MS在企业内部做了一篇论文 - 我们设置了样本,但从未真正实现过它 - Single Sign-on

答案 5 :(得分:0)

使用OAuth和社交提供商查看此链接,它提供了许多已经在.Net中使用的身份验证功能 Microsoft training video on OAuth and single sign on with social providers