如何限制用户访问/更新其他用户的详细信息?

时间:2019-03-23 19:42:51

标签: api security authorization access-control abac

我有一个通过JWT令牌认证的http端点try

我的系统 User1 User2 中有两个有效用户。

如何限制User1使用except端点更新User2的详细信息?

2 个答案:

答案 0 :(得分:0)

在您的JWT中,您应该在包含请求用户的用户ID的令牌主体中拥有所有权。在进行编辑之前,您可以检查JWT中的user_id值是否与user1试图编辑的user_id值匹配。如果user_id的不匹配,则拒绝更改。

    String userId = getUserIdFromJwt();
    if (!userId.equals("some user id")) {
        throw new HttpUnauthorizedException("You do not have access to edit" + 
        "this resource.");
    }

您在JWT中拥有有关当前发出请求的用户的所有信息,因此您可以对用户进行断言。

答案 1 :(得分:0)

您有3个选择:

  • DIY :自己实现将要执行的代码。这就是Chappie Johnson在回应中所建议的。
  • 外部化授权逻辑:使用授权框架为您进行检查。外部化的方式实际上取决于开发API的框架。例如,您可以研究Python的Flask Authorization或Ruby CanCanCan或.NET声明。
  • 使用标准方法来扩展授权:实际上,您正在寻找基于属性的访问控制(ABAC)。在ABAC中,您编写了说明可能发生和不会发生的事情的策略。 是编写策略的两种方式。这种方法的好处是,您始终可以更改策略而无需重写API。