С учетом следующего сценария от имени, как описано в: https://docs.microsoft.com/sv-se/windows-server/identity/ad-fs/development/ad-fs-on-behalf-of-authentication-in-windows-server
Вопрос
Возможно ли этонастроить службу среднего уровня в ADFS 2016 как конфиденциальный клиент (клиент среднего уровня, действующий от имени) И общедоступный / собственный клиент, который будет использоваться из пользовательского интерфейса swagger?
Понимание примера
Чтобы служба среднего уровня могла иметь доступ к внутреннему веб-интерфейсу от имени пользователя, нам необходимо зарегистрировать конфиденциальный клиент (клиент / секрет) в ADFS с ClientID, установленным наАудитория, как указано в документации: «Очень важно, чтобы ida: Audience и ida: ClientID соответствовали друг другу»
Это означает, что в группе приложений теперь есть конфиденциальный клиент сURL-адрес (аудитория) службы среднего уровня, установленный как clientId, а не guid, который вы обычно ожидаете здесь, скажем, https://localhost:5005 ради этого примера.
Это нормально, пример теперь работает,see: https://github.com/ajtowf/WebApp-OpenIDConnect-DotNet для рабочего образца.
Проблема
Допустим, теперь я хочу добавить swagger с swagger-ui к сервису среднего уровня.Это должно быть настроено в ADFS как собственный клиент, так как мы хотим использовать неявный поток.(поток кода авторизации с PKCE не поддерживается в ADFS 2016)
НО
Если мы настроим собственный клиент с указанием для swagger, токен будет выпущен с аудиторией, которая не можетиспользоваться для доступа к самой службе среднего уровня.(судя по всему, его можно использовать для доступа к конечной точке информации о пользователе: urn: microsoft: userinfo )
Чтобы получить действительный токен доступа для службы среднего уровня, клиенту необходимобыть установленным для аудитории так же, как в случае с конфиденциальным клиентом.
НО
ClientID должен быть уникальным в пределах группы приложений, следовательно, может быть только одна регистрация с клиентом, установленным нааудитория.
Возможно ли даже настроить два отдельных потока / клиента?Я что-то упустил?
Это похоже на базовый сценарий, легко настраиваемый с помощью IdentityServer, но в этом случае я застрял с ADFS.
Конфигурация ADFS
Рабочий образец в соответствии с документацией для сценария «от имени».
ClientID, установленный в Audience для клиента среднего уровня обслуживания, чтобы иметь возможностьдля доступа к Backend WebAPI On-Behalf-Of user.
Публичная регистрация клиента для swagger приведет к плохой аудитории из-за guid в качестве ClientID вместо URL ресурса.
Невозможно (очевидно) добавить другое приложение с тем же ClientID.