网上有很多关于使用 JWT (Json Web Token)进行身份验证的信息。但是我仍然没有找到一个清晰的解释,说明在对 多域环境中的单点登录解决方案使用 JWT 令牌时流应该是什么样的。
我在一家公司工作,这家公司在不同的主机上有很多网站。让我们使用 Example1.com和 Example2.com。我们需要一个单点登录解决方案,这意味着如果一个用户在 Example1.com上进行身份验证,我们希望他也在 Example2.com上进行身份验证,这是自动的。
通过使用 OpenId 连接流,我了解到希望在 Example1.com上进行身份验证的用户将首先被重定向到 认证服务器(或者 OP: “ OpenId Provider”)。用户在该服务器上进行身份验证,然后用签名的 JWT 令牌将用户重定向回原来的 Example1.com站点。(我知道还有一个返回 中间代币中间代币的流,它本身可以在以后交换真正的 JWT 令牌,但我认为我们不需要这样做) ..。
所以现在用户回到了 Example1.com上,并且通过了身份验证!他可以发出请求,在 Authentication头中传递 JWT 令牌,服务器能够验证签名的 JWT,因此能够识别用户。漂亮!
第一个问题:
如何将 JWT 令牌存储在客户机上?关于这一点还有很多信息,人们似乎都认为使用 Web Storage比使用老式的 cookies更好。我们希望 JWT 在浏览器重启之间是持久的,所以让我们使用 Local Storage,而不是 Session Storage..。
现在用户可以重新启动浏览器,只要 JWT 令牌没有过期,他仍然会在 Example1.com上进行身份验证!
另外,如果 Example1.com需要向我们的另一个域发出 Ajax 请求,我理解配置 CORS将允许这样做。但是,我们的主要用例不是跨域请求,它有一个 单点登录解决方案!
因此,主要的问题是:
现在,如果用户访问 Example2.com,我们希望使用他已经拥有的 JWT 令牌对他进行身份验证,那么流应该是什么呢?Local Storage似乎不允许跨域访问,因此此时浏览器无法读取 JWT 令牌来向 Example2.com发出请求!
应该:
我们不想要任何花哨的东西,我们会很高兴与最常用的解决方案!