JWT:当用户打开新标签时如何处理GET请求?

nod*_*man 10 javascript authentication cookies tabs jwt

在以API为中心的应用程序上使用JWT而不是Cookie时有很多优点,我知道您可以在通过浏览器访问应用程序时将令牌存储在sessionStorage上.您可以在JS代码上设置拦截器,以便在GET请求的Authorization标头上注入JWT令牌 - 只要这些GET请求来自对用户进行身份验证的相同代码.

但是,当用户通过身份验证后会发生什么,然后打开新选项卡并尝试访问应用程序/站点的不同受限区域(甚至同一区域)?在这种情况下,没有拦截器在新选项卡上的Authorization标头上注入令牌.我想服务器将收到GET请求,在Authorization标头上查找JWT令牌,但不会找到它,拒绝请求.

当您使用Cookie时,它们始终由浏览器本地发送,您不必担心新的选项卡和身份验证.

有没有办法在用户在第一个选项卡中进行身份验证时为浏览器上的域全局设置Authorization标头?如果有的话,这个问题的常用解决方案是什么?

Han*_* Z. 5

在没有正确凭据(例如JWT)的情况下访问受保护的URL时,浏览器将被重定向到特定端点(例如,在授权服务器上),在那里它可以获得新的JWT.

例如,在OpenID Connect Implicit流程中会发生这种情况:http://openid.net/specs/openid-connect-implicit-1_0.html

但是也可以将JWT存储在cookie中.这不是呈现JWT的标准化方式,因此它将特定于您的客户端/浏览器和受保护的应用程序.

  • 我最终使用cookie来保存JWT,但它是由客户端在首次身份验证后使用https://github.com/js-cookie/js-cookie设置的.我的服务器代码按以下顺序检查请求中的JWT:header,body,cookie.因此,只要用户打开新选项卡,就会使用本地设置的cookie.其他页内请求会在标头中注入JWT.这样,操作是面向API的,在最后一种情况下回退到cookie. (3认同)