【问题标题】:How to prevent REST API parameter alterations如何防止 REST API 参数更改
【发布时间】:2023-03-30 17:23:02
【问题描述】:

我正在构建一个 REST API 来公开特定用户保存的所有待办事项列表。用户身份验证使用 OAuth2 协议进行。我有一个授权访问此 API 的 API GW 基于访问令牌。 API 有一个用户输入参数。通过该参数指定的用户保存的所有待办事项列表由API返回

假设 user1 在成功验证后获得访问令牌。他使用该令牌调用此 API,但将“用户”参数设置为 user2。由于 API GW 允许访问 API(因为有一个有效的访问令牌),请求传递给返回 user2 的所有 todo 列表的服务。

如何防止这种情况发生?

【问题讨论】:

    标签: oauth oauth-2.0


    【解决方案1】:

    通常,您希望将access_tokenuser_id 以1:1 的关系存储在SQL 数据库之类的某个地方。之后,您将能够在您的 API 中检查 access_token 的所有权。

    此外,如果您对access_tokens 使用JWT 格式,则可以将user_id 存储在令牌的声明中,而不是存储在数据库中。

    【讨论】:

    • 感谢您的回答。您如何将其推广到任何其他 API 参数?将它们嵌入访问令牌中?
    • @simonjohnson 我会说这取决于您正在构建的内容。首先让我们明确授权过程涉及两个部分,这可能导致两个不同的身份:授权主体和资源所有者。上面链接的 JWT 规范中描述的 user_id 代表授权主题。您可以重用 access_token 所有者的身份,也可以在 API 中添加一个额外的参数来标识资源所有者。
    猜你喜欢
    • 1970-01-01
    • 2020-01-25
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2012-04-17
    • 2013-09-22
    相关资源
    最近更新 更多