Я создаю сервер авторизации oauth2, выполнив эти шаги по ссылке https://azure.github.io/apim-lab/apim-lab/7-security/security-7-2-3-oauth2-authorization-grant -flow.html
Я создал серверное приложение и зарегистрировал клиентское приложение. Также я создал сервер oauth2 в клиентском приложении и настроил API для использования сервера.
Я получаю сообщение об ошибке на портале разработчиков
Кто-нибудь сталкивался с такой проблемой? Есть ли что-то, что мне не хватает?
Я уже это сделал, но ответ тот же. Я перехожу по этой ссылке, чтобы настроить сервер oauth2 azure.github.io/apim-lab/apim-lab/7-security/…
Вы проверили в Trace? Вы можете увидеть конкретное сообщение об ошибке
При ошибке validate-jwt (-0,236 мс) { "message": "Ошибка проверки JWT: IDX10214: проверка аудитории не удалась. Аудитории: 'api://client_app_id'. Не соответствует: validationParameters.ValidAudience: 'null' или validationParameters. ValidAudiences: 'audience_1, client_app_id" }
Да, вам нужно использовать правильную аудиторию при создании токена.
Они одинаковые :) Может есть еще какая-то недостающая конфигурация?
проверьте аудиторию в политике validate-jwt и в авторизации oauth2
Поделитесь политикой validate-jwt и снимком экрана конфигурации авторизации oauth.
обратитесь к этому stackoverflow.com/questions/78857200/…
Я добавил скриншоты в вопросы
Используйте область по умолчанию как api://{clientId}/.default, и я вижу, что вы используете две аудитории.
Я использую API://{clientId}/user_impersonation. это не правильно? не будет ли он запрашивать токен для себя
Будет, но вам нужно добавить user_impersonation в качестве области действия и использовать одну аудиторию (идентификатор клиента) в политике validate-jwt.
Я не могу использовать только одну аудиторию, потому что у меня есть серверное приложение, и у него уже есть своя аудитория. Я зарегистрировал новое клиентское приложение для сервера oauth2 и выполнил шаги отсюда azure.github.io/apim-lab/apim-lab/7-security/… Я просто хочу разрешить клиентскому приложению выдавать себя за пользователей по отношению к внутреннему API.
Вам необходимо связать серверное приложение с внешним приложением, как указано в ссылке azure.github.io/apim-lab/apim-lab/7-security/…
Да, я добавил идентификатор клиентского приложения в серверное приложение. Откройте API -> Добавить клиентское приложение и в разрешениях API клиентского приложения -> Добавить разрешения. Я выполнил все шаги, указанные в ссылке.
Вы получаете какую-либо ошибку сейчас? проверить трассировку
Да, ошибка, которую я публиковал ранее.
Измените область действия по умолчанию на api://client ID/.default и добавьте идентификатор клиента клиентского приложения в аудиторию проверки политики jwt.
Я декодировал токен и вижу, что aad — это идентификатор клиентского приложения. Я предполагал, что клиентское приложение будет пересылать выдающих себя пользователей во внутреннее приложение.
<policies>
<inbound>
<base />
<validate-jwt header-name = "Authorization" failed-validation-httpcode = "401" failed-validation-error-message = "Unauthorized" require-expiration-time = "true" require-scheme = "Bearer" require-signed-tokens = "true">
<openid-config url = "https://login.microsoftonline.com/{tenantID}/v2.0/.well-known/openid-configuration" />
<audiences>
<audience>{Frontend App ClientID}</audience>
</audiences>
<issuers>
<issuer>https://sts.windows.net/{tenantID}/</issuer>
</issuers>
</validate-jwt>
</inbound>
</policies>
Я разместил еще один вопрос, вы знаете, как это сделать? stackoverflow.com/questions/78893854/…
Прежде чем вызывать портал разработчика, попробуйте его на вкладке «Тест» экземпляра APIM. Если вы получили эту ошибку, нажмите «Отслеживать», чтобы узнать больше об этой ошибке.