Невозможно установить утверждения клиента при получении токена конфиденциального клиентского приложения.
Я пытаюсь использовать библиотеку Python MSAL для вызова другого пользовательского API в Azure(предоставляется через AppRegistration с открытой областью API).
Я пишу демон-приложение, которое будет делать запрос. Следуйте документации Azure здесь:
В последнем примере в этой документации Azure предлагается добавить утверждения о пользовательских утверждениях, таких какclient_ip
который будет возвращен в токене.
Точно так же я хотел бы, чтобы требование было установлено наTest
В качестве примера:
app = msal.ConfidentialClientApplication(
config["client_id"], authority=config["authority"],
client_credential={"thumbprint": config["thumbprint"], "private_key": open(
config['private_key_file']).read()},
client_claims={"preferred_username": "Test"}
)
Однако, когда я получаю токен, используя следующий код, претензия не находится в токене.
result = app.acquire_token_for_client(scopes=config["scope"])
В рамках регистрации приложения для приложения-демона я добавилpreferred_username
в качестве необязательного утверждения (для маркеров доступа).
Я не уверен, что не так с моим подходом, или я неправильно истолковал намерениеclient_claims
?
1 ответ
Я попытался воспроизвести то же самое в своей среде и получил результаты, как показано ниже:
Я создал приложение Azure AD и настроил пользовательскиетребовать:
Я сгенерировал токен через Postman, используя следующие параметры:
https://login.microsoftonline.com/TenantID/oauth2/v2.0/token
client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/.default
grant_type:client_credentials
Необязательные утверждения не включаются в токен, как показано ниже:
Обратите внимание : получение необязательных утверждений возможно только с потоком кода авторизации , потоком ROPC , неявным потоком . В настоящее время поток учетных данных клиента не поддерживает добавление каких-либо дополнительных настраиваемых утверждений.
Поток учетных данных клиента извлекает токен в контексте приложения и не будет иметь никаких связанных с пользователем утверждений, таких какpreferred_username
,given_name
илиemail
и т. д. Итак, вам нужно сгенерировать токен в контексте пользователя, чтобы получить утверждения.
В качестве альтернативы я сгенерировал токен доступа, используя конечную точку, как показано ниже:
https://login.microsoftonline.com/tenantID/oauth2/v2.0/authorize?client_id=ClientID&response_type=token&redirect_uri=redirecturi&scope=user.read&response_mode=fragment&state=12345&nonce=678910
Необязательные утверждения включены в токен, как показано ниже:
Ссылка:
утверждения клиента (MSAL) — Microsoft Entra | Майкрософт учиться