OAuth-2.0/JWT - 关于何时使用 scope 和 roles 的指导

27

与OAuth 2.0和JWT相关的一件令人困惑的事情是何时使用scopes和roles。

我认为一些混淆来自于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授权策略的作用域来实现与上述内容非常相似的功能,但我只想知道是否有关于何时使用scope或roles的指导,或者仅仅是偏好问题...

在任何OAuth/JWT相关的RFC中,我都找不到关于角色声明的参考资料,而作用域则被不断提及。

1个回答

51

作用域和角色/组之间最显著的区别在于决定了客户端被允许做什么。

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

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

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

基于角色或组的访问通常在应用程序内部使用,以确定用户可以做什么。


2
好的解释,谢谢。 - GoutamS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接