【问题标题】:Authentication-Info header for Bearer (JWT) Auth SchemeBearer (JWT) Auth Scheme 的 Authentication-Info 标头
【发布时间】:2018-04-15 21:41:58
【问题描述】:

我在 REST api 中使用 JWT Bearer 身份验证方案。为了在身份验证成功后将 jwt 令牌返回给客户端,目前我在正文中使用访问令牌响应,如https://www.rfc-editor.org/rfc/rfc6750#page-10中所述

{
   "access_token":"mF_9.B5f-4.1JqM",
   "token_type":"Bearer",
   "expires_in":3600,
   "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
 }

但也需要在其他 HTTP 请求中返回令牌,例如已经存在正文的注册。 所以,正在考虑使用"Authentication-Info" 标头。但是Bearer Scheme 没有在任何地方指定“Authentication-Info”标头。我应该使用 Authentication-Info 标头来返回 jwt 令牌吗?

不使用 OAuth 2.0,只使用 JWT。

【问题讨论】:

  • “不使用 OAuth 2.0,只使用 JWT。”因此,您不必遵循 OAuth RFC。你可以,我会推荐,使用Authentication-Info 作为传递令牌的方式。
  • 这就是我最终要做的。

标签: http authentication jwt restful-authentication bearer-token


【解决方案1】:

您所拥有的对于 OAuth 2.0 可能是正确的,但对于普通的 JWT,它要简单得多。当你使用普通的自制 JWT 时,客户端会将令牌放在一个名为 Authorization 的 HTTP 头上。标头的值是这样的

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

标题字段也可以称为其他名称。服务器和客户端必须就名称达成一致。 授权只是最常见的名称。

服务器通常会通过响应登录端点上的 POST 请求来颁发令牌。登录成功时,令牌可以是响应正文的一部分。客户端将存储令牌并使用上面的标头随每个请求发送令牌。您可以忘记与访问令牌和刷新令牌有关的所有内容。使用“普通”的基本 JWT 时,只有一个 token,就是 Bearer 后面的值。

我看不出有任何理由在用户注册时颁发令牌。注册后登录即可领取。

如果您只是实现普通身份验证,我建议您阅读 RFC 中的 this 以获取 OAuth。

【讨论】:

  • 我在注册时返回令牌,因为业务要求是在注册后立即登录用户,不应该有登录屏幕。
  • 我在每个请求中使用“Authorization”标头发送令牌,但问题是如何在登录请求中将令牌返回给客户端。
  • 当客户端发送一个post请求时,服务器也必须响应一个响应。通常带有状态码 200 和消息:{成功:真},或类似的东西。您可以将令牌附加到此请求。 This 博客文章有一个示例 (AuthController.js)。它适用于 Node,但概念在所有语言和框架中都是相同的。令牌也可以作为注册端点上的响应发送。
  • 我已经创建了 REST Api。因此,在用户对象响应中附加令牌似乎不合适。
猜你喜欢
  • 2023-03-20
  • 2021-02-06
  • 1970-01-01
  • 2023-03-24
  • 2021-05-11
  • 2016-09-19
  • 2021-09-03
  • 2020-11-21
  • 2018-02-09
相关资源
最近更新 更多