【问题标题】:OAuth-2.0/JWT - guidance about when to use scope vs rolesOAuth-2.0/JWT - 关于何时使用范围与角色的指南
【发布时间】:2020-07-11 12:06:29
【问题描述】:

与 OAuth 2.0 和 JWT 相关但仍然有点令人困惑的一件事是何时使用范围与角色。

我认为一些困惑来自role-based authorization works in ASP.NET Core(这是我工作场所的主要语言/框架)。例如;如果我在我的 JWT 中有如下角色

{
  "aud": "test",
  "iss": "http://localhost:8080/auth/realms/test/",
  "iat": 1585192274,
  "nbf": 1585192274,
  "exp": 1585196174,
  "sub": "12345",
  "roles": ["Admin", "SuperUser"]
}

我可以很容易地保护路线而无需做太多事情,例如:

[ApiController]
[Route("api/v{version:apiVersion}/template/test")]
public class TestController : Controller
{
    [HttpGet]
    [Authorize(Roles = "Admin")]
    public IActionResult Get()
    {
        return Ok("test");
    }
}

我可以使用具有 dotnet 授权策略的范围来实现与上述非常相似的东西,但我想知道是否有一些关于是否/何时使用范围或角色的指导,或者这只是一个偏好问题。 ..

我在任何与 OAuth/JWT 相关的 RFC 中都找不到对角色声明的太多引用,而在整个过程中都提到了范围。

【问题讨论】:

    标签: oauth-2.0 jwt authorization scopes role-based-access-control


    【解决方案1】:

    范围和角色/组之间最显着的区别是决定了允许客户做什么。

    资源范围由资源所有者(用户)通过同意屏幕授予应用程序。例如,客户端应用程序可以发布到我的时间线或查看我的朋友列表。

    用户角色和组由 Azure AD 目录的管理员分配。例如,用户可以提交费用报告或用户可以批准费用报告。

    当外部应用程序想要通过公开的 API 访问用户数据时,通常会使用范围。它们决定客户端应用程序可以做什么。

    基于角色或组的访问权限通常在应用程序中用于确定用户可以做什么。

    【讨论】:

    • 很好的解释,谢谢。
    猜你喜欢
    • 2017-05-28
    • 2016-12-26
    • 2016-08-17
    • 1970-01-01
    • 2019-04-22
    • 2016-07-05
    • 2019-10-30
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多