HTTP/1.1 401 Несанкционировано - Портал для разработчиков

Я создаю сервер авторизации oauth2, выполнив эти шаги по ссылке https://azure.github.io/apim-lab/apim-lab/7-security/security-7-2-3-oauth2-authorization-grant -flow.html
Я создал серверное приложение и зарегистрировал клиентское приложение. Также я создал сервер oauth2 в клиентском приложении и настроил API для использования сервера. Я получаю сообщение об ошибке на портале разработчиков

Кто-нибудь сталкивался с такой проблемой? Есть ли что-то, что мне не хватает?

Прежде чем вызывать портал разработчика, попробуйте его на вкладке «Тест» экземпляра APIM. Если вы получили эту ошибку, нажмите «Отслеживать», чтобы узнать больше об этой ошибке.

Ikhtesam Afrin 19.08.2024 09:38

Я уже это сделал, но ответ тот же. Я перехожу по этой ссылке, чтобы настроить сервер oauth2 azure.github.io/apim-lab/apim-lab/7-security/…

Panda 19.08.2024 10:19

Вы проверили в Trace? Вы можете увидеть конкретное сообщение об ошибке

Ikhtesam Afrin 19.08.2024 10:21

При ошибке validate-jwt (-0,236 мс) { "message": "Ошибка проверки JWT: IDX10214: проверка аудитории не удалась. Аудитории: 'api://client_app_id'. Не соответствует: validationParameters.ValidAudience: 'null' или validationParameters. ValidAudiences: 'audience_1, client_app_id" }

Panda 19.08.2024 11:58

Да, вам нужно использовать правильную аудиторию при создании токена.

Ikhtesam Afrin 19.08.2024 12:07

Они одинаковые :) Может есть еще какая-то недостающая конфигурация?

Panda 19.08.2024 12:10

проверьте аудиторию в политике validate-jwt и в авторизации oauth2

Ikhtesam Afrin 19.08.2024 12:13

Поделитесь политикой validate-jwt и снимком экрана конфигурации авторизации oauth.

Ikhtesam Afrin 19.08.2024 12:14

обратитесь к этому stackoverflow.com/questions/78857200/…

Ikhtesam Afrin 19.08.2024 12:51

Я добавил скриншоты в вопросы

Panda 19.08.2024 13:36

Используйте область по умолчанию как api://{clientId}/.default, и я вижу, что вы используете две аудитории.

Ikhtesam Afrin 19.08.2024 13:55

Я использую API://{clientId}/user_impersonation. это не правильно? не будет ли он запрашивать токен для себя

Panda 19.08.2024 14:12

Будет, но вам нужно добавить user_impersonation в качестве области действия и использовать одну аудиторию (идентификатор клиента) в политике validate-jwt.

Ikhtesam Afrin 19.08.2024 14:40

Я не могу использовать только одну аудиторию, потому что у меня есть серверное приложение, и у него уже есть своя аудитория. Я зарегистрировал новое клиентское приложение для сервера oauth2 и выполнил шаги отсюда azure.github.io/apim-lab/apim-lab/7-security/… Я просто хочу разрешить клиентскому приложению выдавать себя за пользователей по отношению к внутреннему API.

Panda 19.08.2024 15:18

Вам необходимо связать серверное приложение с внешним приложением, как указано в ссылке azure.github.io/apim-lab/apim-lab/7-security/…

Ikhtesam Afrin 19.08.2024 15:23

Да, я добавил идентификатор клиентского приложения в серверное приложение. Откройте API -> Добавить клиентское приложение и в разрешениях API клиентского приложения -> Добавить разрешения. Я выполнил все шаги, указанные в ссылке.

Panda 19.08.2024 15:37

Вы получаете какую-либо ошибку сейчас? проверить трассировку

Ikhtesam Afrin 19.08.2024 15:48

Да, ошибка, которую я публиковал ранее.

Panda 19.08.2024 16:04

Измените область действия по умолчанию на api://client ID/.default и добавьте идентификатор клиента клиентского приложения в аудиторию проверки политики jwt.

Ikhtesam Afrin 19.08.2024 16:59

Я декодировал токен и вижу, что aad — это идентификатор клиентского приложения. Я предполагал, что клиентское приложение будет пересылать выдающих себя пользователей во внутреннее приложение.

Panda 19.08.2024 19:36
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
20
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Четко следуйте всем шагам, приведенным в этой Лабораторной работе, создайте два мультитенантных приложения, как указано в ссылке.
  • Создайте область в серверном приложении, а затем добавьте интерфейсное приложение в разделе «Добавление клиентского приложения». При этом вам не нужно передавать аудитории обоих приложений в политике validate-jwt, вместо этого вы получите доступ к серверному приложению через интерфейсное приложение.

  • Предоставьте разрешение серверному приложению во внешнем приложении.

  • Включите OAuth 2.0 в Azure APIM и предоставьте все сведения о внешнем приложении. Укажите область по умолчанию как {идентификатор клиента внешнего приложения}/.default.

  • Добавьте данную политику в свой API.
<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>
  • Свяжите OAuth 2.0 с API, перейдя в API -> Настройки, а затем опубликуйте изменения на портале разработчика. Когда вы выберете поток авторизации в качестве кода авторизации на портале разработчика, у вас должно появиться всплывающее окно ниже.

  • Вы получите ожидаемый ответ 200 ОК.

Я разместил еще один вопрос, вы знаете, как это сделать? stackoverflow.com/questions/78893854/…

Panda 20.08.2024 20:05

Другие вопросы по теме