Ошибка получения — AADTS500011: субъект ресурса с именем ** не найден в клиенте с именем **.

У меня есть приложение AAD — ABC, которому необходим доступ к другому приложению XYZ через открытый API — «api://XYZ/general». Я пытаюсь использовать библиотеку MSAL и механизм ConfidentialClientApplication, но он постоянно выдает мне сообщение об ошибке:

AADTS500011: Участник ресурса с именем api://XYZ/general не найден в клиенте с именем ***. Это может произойти, если приложение не было установлено администратором клиента или не было получено согласие какого-либо пользователя в клиенте. Возможно, вы отправили запрос на аутентификацию не тому клиенту.

Может ли кто-нибудь помочь мне, как устранить эту ошибку? Меня уже давно заблокировали по этому поводу.

Попытка получить токен доступа для использования API Easy Start. Код-

      authority = app.config["AUTHORITY"] + '/' + app.config["TENANT"]

aadApp = msal.PublicClientApplication(app.config["CLIENT_ID"], authority=authority)

result = None
accounts = aadApp.get_accounts()
if accounts:
    # If a user account exists, use it to acquire a token silently
    result = aadApp.acquire_token_silent(scopes=app.config["OB_SCOPE"], account=accounts[0])

if not result:
    # No user account or token acquisition failed, perform interactive authentication
    result = aadApp.acquire_token_interactive(scopes=app.config["OB_SCOPE"])

access_token = result['access_token']

Ошибка. Введите здесь описание изображения.

2 ответа

У меня есть одно приложение с именемWebAPIгде я представил API с той же областью действия , что и вы:

введите сюда описание изображения

Теперь я зарегистрировал одно приложение Azure AD с именемClientApp18и добавил вышеуказанные разрешения на вкладке разрешений API :

введите сюда описание изображения

Чтобы сгенерировать токен доступа, я напрямую использовал интерактивный поток , изменив ваш код Python:

      import msal

tenant_id = "fb134080-e4d2-45f4-9562-fxxxxxxxxx0"
client_id = "3b48a780-de28-4576-b1c5-exxxxxxxx2"

scopes = ["api://5bc992e5-b3f8-4cfc-8197-aexxxxxxa/general"]

authority = f"https://login.microsoftonline.com/{tenant_id}/"

aadApp = msal.PublicClientApplication(client_id, authority=authority)

result = aadApp.acquire_token_interactive(scopes=scopes)

if "access_token" in result:
    access_token = result['access_token']
    print("Access token:", access_token)
else:
    print("Interactive authentication failed. Please check your Azure AD configuration.")

Когда я запустил приведенный выше код, открылось новое окно для выбора учетной записи для входа в систему следующим образом:

введите сюда описание изображения

Обязательно выберите правильную учетную запись пользователя из того же клиента, где существуют приложения, и после успешной аутентификации вы увидите экран ниже :

введите сюда описание изображения

После аутентификации я успешно получил токен доступа в выходной консоли:

введите сюда описание изображения

Чтобы убедиться в этом, я декодировал указанный выше токен в jwt.ms и получил aud& scpпретензии с правильными значениями:

введите сюда описание изображения

В вашем случае проверьте, вошли ли вы уже в систему с пользователем из другого клиента , отличного от клиента, в котором существуют приложения, или неправильно переданы в коде.

Когда я запустил код, выбрав пользователя из другого арендатора или включив неправильно, я получил такую ​​же ошибку , как и вы:

введите сюда описание изображения

Чтобы устранить ошибку, попробуйте использовать интерактивный поток напрямую, как я уже упоминал, войдя в систему с правильной учетной записью пользователя из того же клиента, где существуют приложения, и проверьте, правильно ли вы используетеtenantIDили нет.

Я считаю, что вам нужно добавить область для вашего ресурса api://XYZ/general при регистрации приложения Azure AD. Вот ссылка на него: https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-expose-web-apis#add-a-scope . Надеюсь, это поможет.

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