使用Identity Server 4实现单点登录

5

如果有一个Identity Server 4,我们能否使用单个用户身份验证服务器实现多个应用程序使用的单点登录?

如果可以,我们该如何做到这一点?是否有相关的参考资料可供使用?

2个回答

2
实际上,启用单点登录无需特殊操作。它默认可用,但并非适用于所有场景。
为使SSO正常工作,只需遵循一个规则:
用户必须在IdentityServer网站上登录,因为这是SSO cookie的放置位置。
对于不需要用户在IdentityServer网站上登录的授权类型,SSO不可用。
它是如何工作的:
用户访问 webapp1,点击登录按钮并被重定向到 IdentityServer 网站以进行登录。IdentityServer 将扫描 SSO cookie,但由于这是第一次且用户尚未经过身份验证,因此将找不到它。
成功登录后,SSO cookie 被存储(在 IdentityServer 网站上),并返回已经过身份验证的用户到 webapp1。
然后,用户访问 webapp2。只要用户不需要进行身份验证,用户就是匿名访客。
当用户单击登录按钮或访问受保护页面(例如受 [Authorize] 属性保护)时,需要进行身份验证。这会触发身份验证流程,将用户重定向到 IdentityServer 网站。
再次,IdentityServer 将扫描 SSO cookie,但这次会找到它。由于已经经过身份验证,因此用户无需再次登录,而是返回到网站作为已经过身份验证的用户。
请注意,客户端可以通过设置 prompt=login 参数来覆盖 SSO cookie。
请注意,Cookie 不支持跨浏览器。如果使用不同的浏览器访问 webapp2,用户需要重新登录,因为该 SSO Cookie 在此浏览器中不可用。

问题:我认为实现SSO的唯一方法是在Identity Server配置中将多个RedirectIds添加到单个客户端中。这是正确的做法,还是可以使用单独的客户端?当我使用后者时,我不断被重定向到不同客户端的Consent页面。显然,如果它们都是同一个客户端,就不会出现这种重定向。所以,使用RedirectUris集合是实现SSO的方法吗?谢谢 - onefootswill
@onefootswill 通常情况下,客户端只有一个实例,其中一个重定向URL就足够了。您可以为多个实例使用相同的客户端ID,在这种情况下,您可以为每个实例添加一个重定向URL。请注意,重定向URL用于验证,以防止来自虚假客户端的登录。同意与重定向URL无关。同意存储在PersistedGrants表中,每个客户端ID一个。使用不同的客户端ID需要用户再次同意。 - user4864425
谢谢。昨晚我意识到,我甚至不需要一个同意屏幕。这不是必需品,我们也没有给第三方应用程序访问任何内容。这只是我们的应用程序。当您删除同意屏幕时,即使您为每个客户端使用单独的客户端配置,您也可以获得SSO体验(在我的测试中)。因此,我已经回到了为不同的客户端使用单独的客户端配置。目前为止一切顺利。 - onefootswill

-1

可以的,这就是IdentityServer4用于单点登录和身份验证的目的。

文档和一些示例


4
文档和示例中都没有展示跨不同客户端ID(即每个应用程序一个)的“单点登录”。 - Leon

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