使用JWT进行跨域认证的单点登录流程

有关于使用JWT(Json Web Token)进行身份验证的大量有关Web的信息。但是,我仍然没有清楚地说明在多域环境中为单一登录解决方案使用JWT令牌时流程应该如何。

我为一家在不同主机上拥有大量网站的公司工作。我们来使用example1.com和example2.com。我们需要一个单一的登录解决方案,这意味着如果用户在example1.com上进行身份验证,我们希望他也自动在example2.com上进行身份验证。

使用OpenId Connect流程,我明白要在example1.com上进行身份验证的用户将首先被重定向到认证服务器(或OP:“OpenId Provider”)。用户在该服务器上进行身份验证,然后使用签名的JWT令牌将其重定向到原始的example1.com站点。 (我知道有另一个流程返回一个中间令牌,本身可以在之后的真正的JWT令牌交换,但我不认为这是我们需要的)

所以现在用户已经回到example1.com并被认证了!他可以发出请求,将JWT令牌传递给Authentication头,服务器能够验证签名的JWT,因此能够识别用户。太好了!

第一个问题:

JWT令牌如何存储在客户端?此外,还有很多信息,人们似乎同意,使用Web存储是要走的路,而不是旧的cookie。我们希望JWT在浏览器重新启动之间保持持续,所以让我们使用本地存储,而不是会话存储…

现在用户可以重新启动浏览器,只要JWT令牌不过期,他仍然会在example1.com上进行身份验证。

此外,如果exam​​ple1.com需要向我们其他域名发出Ajax请求,那么我明白配置CORS将允许这样做。但是我们的主要用例不是跨域请求,它具有一个单一的登录解决方案!

所以主要的问题是:

现在,如果用户进入example2.com并且我们希望他被认证,使用他已经拥有的JWT令牌,流程应该如何?本地存储似乎不允许进行跨域访问,因此在这一点上,浏览器无法读取JWT令牌以向example2.com发出请求!

应该 :

>再次将用户重定向到认证服务器?当用户为example1.com认证时,
认证服务器可能已经在用户上设置了一个cookie,因此example2.com的新认证请求可以使用该cookie来查看用户已经被认证,并立即将他重定向到
example2.com具有相同的JWT令牌?
>或者可以在example2.com上的浏览器访问JWT令牌,而不必再次访问认证服务器?我看到有cross-storage solutions,但是那些被广泛使用?他们是跨域SSO环境的建议解决方案吗?

我们不想要任何想法,我们将对使用最多的解决方案感到满意!

应该将用户重新定向到认证服务器,并获得一个新的令牌(JWT),一个专门针对example2.com的令牌。这是OpenID Connect和任何其他跨域联盟SSO协议的工作原理。
http://stackoverflow.com/questions/33723033/single-sign-on-flow-using-jwt-for-cross-domain-authentication

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:使用JWT进行跨域认证的单点登录流程