-
Describe the bug To Reproduce import msal
confidential_client = msal.ConfidentialClientApplication(
<client_id>,
authority="https://login.microsoftonline.com/<tenant>",
client_credential=<cliend_secret>)
devops_token = confidential_client.acquire_token_on_behalf_of(
user_assertion=request.headers.get("X-Ms-Token-Aad-Access-Token"),
scopes=["499b84ac-1321-427f-aa17-267ca6975798/user_impersonation"]) Expected behavior What you see instead The MSAL Python version you are using |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 5 replies
-
Your calling pattern seems about right. I can't tell whether it was some configuration issues. Some reference materials for you:
|
Beta Was this translation helpful? Give feedback.
-
@flixman - You have a python web app that needs to access the azure dev ops API. You have deployed this app on azure app service and are currently using the built in authentication feature of App Service aka EasyAuth. Work Around - To achieve this we need to set the resource using the Azure Resource Explorer.
Recommendation - we highly recommend you to use MSAL python in your application code so that the authentication can be handled at the application level This Web application will use MSAL for Python to sign-in a user and obtains an Access Token for API ( Azure dev ops in your case ) from Azure AD. The Access Token will prove that the user is authorized to access the API endpoint as defined in the scope. .You can refer to the below sample for reference |
Beta Was this translation helpful? Give feedback.
@flixman - You have a python web app that needs to access the azure dev ops API. You have deployed this app on azure app service and are currently using the built in authentication feature of App Service aka EasyAuth.
The value of the access token generated from EasyAuth is actually an "authentication code" and when the resource is set, the EasyAuth module exchanges this “authentication code” at the /token endpoint of the Azure Active Directory, to get an access token. We ran couple of tests at your end and figured out that the scope - user_impersonation was not set at the resource level.
Work Around - To achieve this we need to set the resource using the Azure Resource Explorer.