【问题标题】:Authentication with JWT and JSONAPI使用 JWT 和 JSONAPI 进行身份验证
【发布时间】:2016-04-20 20:35:35
【问题描述】:

我正在使用以下技术/方法实现 REST API:

我想实现身份验证端点,它应该在 JSONAPI 格式的 POST 请求中接收用户名和密码,并以 JSONAPI 格式返回 JWT 令牌。 但我发现有些矛盾不允许我 100% 使用 RESTful:

我们将端点命名为/tokens,因为它实际上创建了令牌。响应也是tokens 类型的资源,例如:

{
  "data": {
    "type": "tokens",
    "attributes": {
      "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEifQ.ivJ5P23wqVo3w31flg3aOu7er--Ijght_RrBf_MuqsU",
    }
  }
}

但是请求呢? usernamepassword 是用户的属性,但它们应该发送到 /tokens 端点。如果我将users 资源发送到/tokens 端点,它没有多大意义。

有没有办法解决这个问题,遵循 JSONAPI 并保持 API 有意义?

【问题讨论】:

  • 在这些情况下,我所做的是拥有一个会话对象或实体,它包含您提到的属性,我不在乎它们来自用户,因为用户是进行身份验证的人。在任何情况下,JSONAPI 和 REST 都是很好的指南,但在需要时应用您的风格。

标签: rest authentication jwt json-api


【解决方案1】:

如果我将用户资源发送到 /tokens 端点,它没有多大意义。

为什么不呢? REST 不强制您只将用户发送到用户资源。当然,当您对用户资源进行 CRUD 操作时,您将通过用户资源端点执行此操作。

但是要生成令牌,将用户资源发送到令牌端点是完全合理的。

【讨论】:

  • 您好,感谢您的回复。 > REST 不强制您只将用户发送到用户资源。 REST 没有,但 REST API 规范可以。这就是问题所在。
【解决方案2】:

您还可以通过 HTTP 授权标头或作为 JSON 有效负载的顶级 meta 属性的一部分提供用户凭据。

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 2016-04-07
    • 2017-04-27
    • 2017-11-25
    • 2023-03-27
    • 2021-05-29
    • 2017-07-30
    • 2018-06-30
    • 2018-08-03
    相关资源
    最近更新 更多