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

bwntbbo3  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(137)

如下面的幻灯片所述,客户端必须在下一次请求时通过Authorization Headerjwt发送回服务器。

但是我如何定义Authorization Header并将JWT添加到服务器?
我现在的状态是:
1.用户通过POST请求向服务器发送usernamepassword
1.服务器创建JWT
1.服务器将签名的JWT发送回客户端,并将其保存在cookie中。
我的问题是

*登录时:

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

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

如果我理解正确的话,客户端必须从登录发送JWT到服务器,然后发送第二个JWT和数据;或者我可以通过POST请求发送数据吗?

oknrviil

oknrviil1#

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

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,但工作流程是一样的,只是语法不同。
现在,为了验证这个令牌是否存在,服务器需要 verify() 这个令牌对于所定义的secret是有效的。在客户端发出的每个请求中,对于授权端点,每次都需要发送此令牌。

zvokhttg

zvokhttg2#

上面的用户要求一个基于浏览器的方法来设置授权头,或者所有的头。
(Node.js在服务器上运行。我意识到上面接受的答案是指一个服务器向另一个服务器进行身份验证,并且响应者称之为“客户端代码”在技术上是正确的,关于服务器到服务器的通信,遵循客户端-服务器模型,谁向谁请求授权,但这并没有解决真正的问题:浏览器如何修改它的授权头以包含存储的令牌等。
除了html href(它不提供访问或更改发送的头信息的方法)之外,还有JavaScript发送请求的方法。可以使用标准XHR来演示如何通过JavaScript设置头

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

注意:Bearer关键字后面应该有一个空格。
你也许可以找到php模板化的方法,将标记写入呈现的页面(隐藏元素?)但是在浏览器中运行的JavaScript提供了用于操纵请求报头的手段。值得注意的是,cookie会自动发送给给定域的所有请求,而本地/会话存储通常需要手动设置它们。

相关问题