如何将JWT添加到授权标头?

时间:2017-01-04 19:12:44

标签: php authentication http-headers jwt

如下面的幻灯片所示,客户端必须在下一个请求时通过jwtAuthorization Header发送回服务器。

enter image description here

但是如何定义authorisation header并将JWT添加到服务器?

我目前的状态是:

  1. 用户username向服务器发送paswordpost
  2. 服务器创建JWT
  3. 服务器将签名的JWT发送回客户端并将其保存在cookie中。
  4. 现在我的问题:

    如果是登录

    据我所知,现在有必要将JWT发送回服务器。服务器验证令牌并将其发回以完成登录过程。

    如何将JWT添加到authentication header

    如果运行流程并从计算中接收数据:

    我是否理解,客户端必须将JWT从登录信息发送到服务器,并且第二个JWT包含数据? 或者我可以按POST发送数据吗?

2 个答案:

答案 0 :(得分:7)

所以,你对JWT非常正确。将数据从客户端发送到服务器(在创建JWT之后)时,您需要做的就是将其添加到请求标头中。许多人会尝试与OAuth保持相同的路径并添加类似于以下节点片段的承载令牌:

var rp = require('request-promise');
options = {
  method: GET,
  uri: 'https://www.example.com/api/sample',
  headers: {
    Authorization: "Bearer <insert_your_JWT_here>"
  }
}
rp(options).then(function(res){
  <handle_response>
}

当然,我知道你提到了PHP,但工作流程是相同的,只是语法不同。

现在,为了验证此令牌是否存在,服务器需要验证()该令牌对于已定义的秘密有效。在客户端发出的每个请求中,对于授权端点,您需要每次都发送此令牌。

答案 1 :(得分:3)

上面的用户要求提供基于浏览器的设置授权标头或ALL标题。

(Node.js在服务器上运行。我意识到上面接受的答案是指对另一个服务器进行身份验证的服务器,并且响应者调用这个&#34;客户端代码&#34;在技术上是正确的,关于服务器到服务器之间的通信遵循谁请求授权的客户端 - 服务器模型,但这没有解决真正的问题:浏览器如何修改它的授权标头以包括存储的令牌等。

除了提供访问或更改已发送标头的方法的html href之外,还有javascript方式发送请求。 可以使用标准XHR来演示如何通过javascript设置标头

xhr.open('GET', url, true);
xhr.setRequestHeader("Authorization", "Bearer" + yourtoken);
xhr.send();

您可能能够找到将模板刻入渲染页面(隐藏元素?)的php模板化方法,但浏览器中运行的javascript提供了操作请求标头的方法。 值得注意的是,cookie会自动发送给给定域的所有请求,而本地/会话存储需要通常手动设置它们。