Ошибка получения — 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 . Надеюсь, это поможет.