Должен ли я отправить идентификационный токен на мои ресурсы API? - PullRequest
0 голосов
/ 15 января 2019

Ciao,

Я работаю с IdentityServer4 с целью защиты API ресурса и раскрытия идентификационного сервера внутри моей организации.

Так что на самом деле у меня есть эти элементы:

  • Сервер авторизации
  • Ресурсы API
  • Клиент (SPA-приложение)

Я хочу защитить свой API с помощью области действия и отдельных действий, к которым обращаются роли пользователя. Так, например, у меня есть этот apis:

- API 1 (Scope API 1)
    - Action1.1 <-- Only admin
    - Action1.2 <-- Only manager
    - Action1.3 <-- Only manager

- API 2 (Scope API 2)
    - Action2.1 <-- Admin and manager
    - Action2.2 <-- Only users
    - Action2.3 <-- Only users

Я знаю, что протокол OAuth2 предназначен для авторизации (с его access_token), а OpenID Connect обогащает протокол OAuth2, поддерживающий аутентификацию (с его identity_token).

Я бы знал, каковы наилучшие практики для достижения моей цели. Я нашел два варианта:

  1. Отправка в API-ресурсы identity_token и authorization_token (чтобы я мог просматривать роль пользователя с помощью identity_token и получать доступ к области действия).
  2. Добавление роли в access_token.

Какая лучшая практика? Любой совет приветствуется

Спасибо

1 Ответ

0 голосов
/ 16 января 2019

На мой взгляд, не стоит отправлять токен ID на свой ресурс. Идентификационный токен предназначен только для клиентского приложения. Клиент анализирует содержимое токена и использует информацию пользователя. Цель токена доступа состоит в том, чтобы информировать API о том, что канал-носитель токена был авторизован для доступа к API и выполнения заранее определенного набора действий в соответствии с заявкой на область действия в токене.

Другой момент касается спецификации OpenID Connect, аудитория идентификатора токена (указанная в утверждении aud) должна быть идентификатором клиента приложения, выполняющего запрос аутентификации. Если это не так, вы не должны доверять токену. И наоборот, API ожидает токен со значением aud, равным уникальному идентификатору API. Так что, на мой взгляд, включение заявки на разрешение в маркер доступа было бы лучшим мнением.

...