gpt4 book ai didi

REST API 访问控制从访问 token 与路径参数中提取主题

转载 作者:行者123 更新时间:2023-12-02 20:30:06 25 4
gpt4 key购买 nike

在 OAUTH 中保护 REST API 的一般想法是使用 Authorization Bearer <access token> header ,通常是 JWT,它具有有关主题的信息,即。 sub: u1 其中u1是数据库中的userId。

有了这样的访问 token ,客户端应用程序可以访问不同的资源。假设一个用户有很多车,有很多船等等......所以,以 RESTful 方式,/users 返回所有用户,/users/:u1 返回数据user u1, /users/:u1/cars/:c1 返回用户 u1, /users/的汽车 c1 的数据:u1/boats/:b1 返回用户 u1 的船 b1 等的数据。

我的问题是关于u1u1 是不是应该从 JWT 访问 token 中提取出来,因为我们知道我们可以信任 JWT?理论上,应用程序可以使用为用户 u1 颁发的 JWT,但请求访问 /users/:u2 应该被禁止。

可以使 /users/:u1 不可用,并强制客户端应用调用 /users 并从 JWT 中提取 sub .但是,调用 /users 返回 u1 的数据会破坏 RESTful 模式及其优势(即 http 缓存)。

什么是正确的方法?

这可能是关于 REST api 问题的授权框架。 JWT 只能处理 authentication 而已。

最佳答案

IMO,您的 REST API 应该独立于您的授权框架。

虽然在您的情况下用户 u1 无法访问用户 u2 的汽车或船只是有道理的,但这可能不适用于所有用户。

您可以很容易地想象管理员用户或某些其他角色确实有权访问任何(或特定的一部分)用户的汽车和船只。

所以我想说

GET /users/:u1/cars/

应该响应 HTTP 200 OK 并返回用户 u1 的所有汽车(如果用户有权检索用户 u1 的汽车)。否则它应该响应 HTTP 403 Forbidden

因此,换句话说,使用来自 JWT token 的信息来授权操作。不要更改您的 API 设计以从中隐式推断用户上下文。

关于REST API 访问控制从访问 token 与路径参数中提取主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49077795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com