【问题标题】:How to add JWT to authorization header?如何将 JWT 添加到授权标头?
【发布时间】:2017-05-19 04:49:39
【问题描述】:

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

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

我现在的状态是:

  1. 用户通过POST 请求将usernamepassword 发送到服务器。
  2. 服务器创建JWT
  3. 服务器将签名的JWT 发送回客户端并将其保存在cookie 中。

现在我的问题:

  • 登录时:

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

    如何将JWT 添加到Authorization Header

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

    我是否理解正确,客户端必须将 JWT 从登录发送到服务器,然后将第二个 JWT 与数据一起发送;或者我可以通过POST请求发送数据吗?

【问题讨论】:

  • 您使用 API 进行身份验证,如果您提供了有效凭据,您将获得 JWT。您发送带有未来请求的 JWT 以保持身份验证。只要 JWT 在标头中,您就可以使用 POST 发送数据。如何执行取决于您提出请求的方式
  • 据我了解您的评论,身份验证过程已经完成,此时 JWT 存储在 cookie 中。为了保持身份验证,我必须将令牌与所有未来请求一起发送并在服务器上验证它们并再次设置它们。但是如何将 JWT 添加到标题中?这是步骤,我还不明白。
  • 如前所述,您如何做到这一点取决于您提出请求的方式:)

标签: php authentication http-headers jwt


【解决方案1】:

所以,您对 JWT 的看法非常正确。从客户端向服务器发送数据时(在创建 JWT 之后),您需要做的就是将其添加到请求标头中。许多人会尝试与 OAuth 保持相同的路径,并添加类似于下面的节点 sn-p 的 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() 确认该令牌对于已定义的秘密有效。在客户端发出的每个请求中,对于授权端点,您每次都需要发送此令牌。

【讨论】:

  • 据了解,您截取的代码来自服务器端?对吗?
  • 我显示的sn-p来自客户端。在我的回复中,服务器将是 uri = example.com/api/sample
  • 好的,所以正确地说:我必须创建将authentication header 作为Bearer 发送回服务器的过程是在客户端上创建(可能使用angularJS)?
  • 听起来不错....根据您的服务器解释令牌的方式,它可以是 Bearer 或您使用的任何关键字。任何 JS 框架都可以在发送前修改请求头。
  • 确保如果这是一个好的答案,则标记为答案;或者随时询问您是否仍然感到困惑。
【解决方案2】:

上面的用户要求一种基于浏览器的方法来设置授权标头,或者根本就没有标头。

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

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

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

注意:Bearer 关键字后面应该有一个空格。

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

【讨论】:

    猜你喜欢
    • 2021-07-22
    • 2017-05-24
    • 2019-09-23
    • 2020-01-09
    • 2012-05-02
    • 2018-05-04
    • 1970-01-01
    • 2018-09-16
    相关资源
    最近更新 更多