使用 JWT 和 JSONAPI 进行身份验证
Posted
技术标签:
【中文标题】使用 JWT 和 JSONAPI 进行身份验证【英文标题】:Authentication with JWT and JSONAPI 【发布时间】:2016-04-20 20:35:35 【问题描述】:我正在使用以下技术/方法实现 REST API:
JSONAPI
JWT token
我想实现身份验证端点,它应该在 JSONAPI 格式的 POST 请求中接收用户名和密码,并以 JSONAPI 格式返回 JWT 令牌。 但我发现有些矛盾不允许我 100% 使用 RESTful:
我们将端点命名为/tokens
,因为它实际上创建了令牌。响应也是tokens
类型的资源,例如:
"data":
"type": "tokens",
"attributes":
"value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEifQ.ivJ5P23wqVo3w31flg3aOu7er--Ijght_RrBf_MuqsU",
但是请求呢? username
和 password
是用户的属性,但它们应该发送到 /tokens
端点。如果我将users
资源发送到/tokens
端点,它没有多大意义。
有没有办法解决这个问题,遵循 JSONAPI 并保持 API 有意义?
【问题讨论】:
在这些情况下,我所做的是拥有一个会话对象或实体,它包含您提到的属性,我不在乎它们来自用户,因为用户是进行身份验证的人。在任何情况下,JSONAPI 和 REST 都是很好的指南,但在需要时应用您的风格。 【参考方案1】:如果我将用户资源发送到 /tokens 端点,它没有多大意义。
为什么不呢? REST 不强制您只将用户发送到用户资源。当然,当您对用户资源进行 CRUD 操作时,您将通过用户资源端点执行此操作。
但是要生成令牌,将用户资源发送到令牌端点是完全合理的。
【讨论】:
您好,感谢您的回复。 > REST 不强制您只将用户发送到用户资源。 REST 没有,但 REST API 规范可以。这就是问题所在。【参考方案2】:您还可以通过 HTTP 授权标头或作为 JSON 有效负载的*** meta
属性的一部分提供用户凭据。
【讨论】:
以上是关于使用 JWT 和 JSONAPI 进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章
在 feathersjs 中使用 JWT 进行身份验证和会话处理