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

Я довольно хорошо разбираюсь в большинстве вещей, связанных с 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");
    }
}

Я мог бы реализовать нечто очень похожее на приведенное выше, используя Области применения с политикой авторизации do tnet, но я просто хотел бы знать, есть ли какое-то руководство относительно того, следует ли / когда использовать область или роли, или это просто вопрос предпочтений ...

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

1 Ответ

1 голос
/ 31 марта 2020

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

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

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

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

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

...