OAuth-2.0 / JWT - руководство о том, когда использовать область действия и роли

Я достаточно хорошо разбираюсь в большинстве вещей, связанных с OAuth 2.0 и JWT, но одна вещь, которая все еще немного сбивает с толку, - это когда и когда использовать области действия или роли.

Я думаю, что некоторая путаница возникает из-за того, как авторизация на основе ролей работает в 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, но я просто хотел бы знать, есть ли какое-то руководство о том, когда / когда использовать область действия или роли, или это просто вопрос предпочтений ...

Я не могу найти много ссылок на утверждения ролей в каких-либо RFC, связанных с OAuth / JWT, тогда как области действия упоминаются повсюду.


person Ryan.Bartsch    schedule 31.03.2020    source источник


Ответы (1)


Наиболее существенное различие между областями действия и ролями / группами заключается в том, что кто определяет, что разрешено делать клиенту.

Области ресурсов предоставляются владельцем ресурса (пользователем) приложению через экран согласия. Например, клиентское приложение может публиковать сообщения на моей шкале времени или просматривать список моих друзей.

Роли и группы пользователей назначаются администратором каталога Azure AD. Например, пользователь может отправлять отчеты о расходах или утверждать отчеты о расходах.

Области обычно используются, когда внешнее приложение хочет получить доступ к данным пользователя через открытый API. Они определяют, что может делать клиентское приложение.

Доступ на основе ролей или групп обычно используется в приложении для определения того, что может делать пользователь.

person MvdD    schedule 31.03.2020