OAuth-2.0/JWT - 关于何时使用作用域与角色的指南
OAuth-2.0/JWT - guidance about when to use scope vs roles
与 OAuth 2.0 和 JWT 相关但仍然有点令人困惑的一件事是何时使用范围与角色。
我认为一些困惑来自 role-based authorization works in ASP.NET Core(这是我工作场所的主要 language/framework)。例如;如果我在我的 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 授权策略的范围来实现与上面非常相似的东西,但我只想知道是否有一些关于 if/when 使用范围或角色的指导,或者它只是一个偏好问题...
我在任何 OAuth/JWT-related RFC 中都找不到太多关于角色声明的参考,而范围在整个过程中都被提及。
范围和 roles/groups 之间最显着的区别是 谁 决定允许客户端做什么。
资源范围由资源所有者(用户)通过同意屏幕授予应用程序。例如,客户端应用程序可以 post 到我的时间线或查看我的好友列表。
用户角色和组由 Azure AD 目录的管理员分配。例如,用户可以提交费用报告或用户可以批准费用报告。
当外部应用程序想要通过公开的 API 访问用户数据时,通常会使用范围。他们决定客户端应用程序可以做什么。
通常在应用程序中使用基于角色或组的访问来确定用户可以做什么。
与 OAuth 2.0 和 JWT 相关但仍然有点令人困惑的一件事是何时使用范围与角色。
我认为一些困惑来自 role-based authorization works in ASP.NET Core(这是我工作场所的主要 language/framework)。例如;如果我在我的 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 授权策略的范围来实现与上面非常相似的东西,但我只想知道是否有一些关于 if/when 使用范围或角色的指导,或者它只是一个偏好问题...
我在任何 OAuth/JWT-related RFC 中都找不到太多关于角色声明的参考,而范围在整个过程中都被提及。
范围和 roles/groups 之间最显着的区别是 谁 决定允许客户端做什么。
资源范围由资源所有者(用户)通过同意屏幕授予应用程序。例如,客户端应用程序可以 post 到我的时间线或查看我的好友列表。
用户角色和组由 Azure AD 目录的管理员分配。例如,用户可以提交费用报告或用户可以批准费用报告。
当外部应用程序想要通过公开的 API 访问用户数据时,通常会使用范围。他们决定客户端应用程序可以做什么。
通常在应用程序中使用基于角色或组的访问来确定用户可以做什么。