НАСТРОЙКА:
У нас есть приложение, которое должно аутентифицироваться в API с помощью ADFS. Для этого кажется целесообразным использовать поток предоставления клиентских учетных данных;
https://docs.microsoft.com/en-us/windows-server/identity/ad-fs/overview/ad-fs-openid-connect-oauth-flows-scenarios#client -credentials-grant-flow
Поэтому в ADFS я создал новую группу приложений с серверным приложением и веб-API со следующей настройкой,
Серверное приложение:
- Идентификатор клиента: client1
- Секрет клиента: (некоторый guid)
Веб-API:
- Проверяющие стороны: client1
- Политика контроля доступа: Разрешить всем
- Разрешения клиента -> Клиентское приложение: client1
- Разрешенные области: профиль openid allatclaim
Затем я запрашиваю токен через https://.../adfs/oauth2/token с
client_id=client1
client_secret=(some-guid)
grant_type=client_credentials
Я получил токен JWT с aud и appid, как и ожидалось:
"aud": "microsoft:identityserver:client1"
"appid": "client1"
ПРОБЛЕМА:
Проблема возникает, когда я хочу добавить другого клиента для использования с API. Поэтому я изменяю свои настройки на
Серверное приложение 1:
- Идентификатор клиента: client1
- Секрет клиента: (some-guid)
Серверное приложение 2:
- Идентификатор клиента: client2
- Секрет клиента: (некоторый guid)
Веб-API:
- Проверяющие стороны: client1, client2
- Политика контроля доступа: Разрешить всем
- Клиентские разрешения -> Клиентское приложение: client1, client2
- Разрешенные области: профиль openid allatclaim
Затем, когда я запрашиваю токен JWT с учетными данными client2 (client_id и client_secret), я получаю:
"aud": "microsoft:identityserver:client1"
и то же самое, если я использую client1. Я попытался добавить различные проверяющие стороны в веб-API, и кажется, что он всегда устанавливает aud в JWT на первый RP в списке (в алфавитном порядке c). Например, если я также добавлю 123 в качестве RP в веб-API, то «aud» станет «microsoft: identityserver: 123» для client1 и client2.
Если я вместо этого удаляю все проверяющие стороны и добавляю URL-адрес моего API, а затем Aud в токене JWT становится "urn: microsoft: userinfo".
Из того, что я прочитал, поле aud в токене JWT должно содержать всех принципалов, которые будут обрабатывать токен JWT. См. https://tools.ietf.org/html/rfc7519#section -4.1.3 .
ВОПРОСЫ:
Как настроить группу приложений, чтобы иметь возможность иметь несколько клиентов?
Может ли ADFS отправлять несколько аудиторий вместо только первой?
Или я использовал неправильный подход?
С уважением, Джеспер