什么是最好的解决方案,以实现单一登录在一个.净的应用程序?我已经google搜索发现的几个解决方案,但我不是很相信那些解决方案。

用户登录website1然后转移到2做.怎2做会知道的用户登录?我猜测通过一些令牌在url这将是检查,2做在数据库的有效性。这意味着,我需要马歇尔的所有网址中website1其需要2做?

其次,如果用户继续浏览2做说1小时,然后移动到website1.由于时间website1届会议时使用户将会看到一个登录网页,是不是?但这种行为是错误的,因为每个标志的功能。

有帮助吗?

解决方案

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

让我们考虑想要使用单点登录的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。

其他提示

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

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

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

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

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

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

你可以使用不同的SSO机构不同的应用程序的基础上应用程序。

然而,我可以看见"出SSO"服务从生活、谷歌、雅虎、Facebook等。提供身份验证通过支持API.这将帮助我们摆脱的问题,维护我们的自SSO的服务实现。

如果你需要一个基本了解如何SSO的工作,可以参考 在这里,

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

使用OAuth和社交提供程序查看此链接,它提供了许多已经在.Net中使用的身份验证功能 Microsoft培训OAuth视频和社交提供商单点登录

scroll top