服务器如何将JWT令牌返回给客户端?

时间:2018-07-24 15:58:54

标签: java authentication oauth-2.0 http-headers jwt

这是我第一次遇到JWT令牌,我想知道该令牌在首次创建后如何返回给客户端。

它应该出现在Authorization : Bearer header中吗?

通常,在每次请求时,都是客户端在Authorization : Bearer header中传递令牌。
我想知道在用户通过身份验证并创建令牌后,服务器如何将该令牌传递给客户端。还在同一标题中吗?在不同的标题中?

在我的情况下,服务器将生成令牌,而不是作为响应,而是作为请求的一部分。

例如:-

用户将登录到门户,然后单击指向授权应用程序的链接。包含用户声明的JWT将作为请求的一部分传递到授权的应用程序。
最好的方法是什么? GET还是POST?标头(哪个)?请求参数? POST正文? 谢谢!

3 个答案:

答案 0 :(得分:2)

关于如何将JWT令牌返回给客户端没有标准,但是,请检查此URL,它会回答您的问题

https://github.com/dwyl/hapi-auth-jwt2/issues/82#issuecomment-129873082

  

将JWT令牌放入Authorization标头中使我们可以灵活地在Web应用程序中发送实际响应。对于仅REST的App / API,您可以自由发送JWT作为响应正文或cookie。重要的是客户端如何存储JWT并将其发送回服务器,这是在Authorization标头(或Cookie或URL令牌,如果您愿意的话)中完成的

     

对于“野生”中存在的这种情况,我还没有看到服务器向客户端发送Authorization标头的示例,但是规范中没有任何内容表明这是一种反模式。   参见:http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html

     

如果您要遵循准则,请遵循以下示例:http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html#ExAccTokResp

答案 1 :(得分:1)

人们可能有兴趣知道 OAuth 2.0 standard 为此目的指定了响应正文:

<块引用>

5.1.成功响应

授权服务器发出访问令牌和可选的刷新 令牌,并通过添加以下参数来构造响应 到带有 200 (OK) 状态代码的 HTTP 响应的实体主体:

access_token
必需的。授权服务器颁发的访问令牌。
[...]

答案 2 :(得分:0)

此外,当您可以将标记放在URL中时,还有另一种策略。在服务器端,您可以在URL后添加令牌,以防从某些安全服务获得重定向。例如:

http://[my-app]/index.html?access_token=sadmopwmopmdmvsasom....

然后在js中,您可以像这样获得它:

let url = new URL(window.location);
let accessToken = url.searchParams.get("access_token"); 

但是,请记住,这种方法不能被认为是安全的。