如何使用MSAL中的客户端机密获取Azure访问令牌?

时间:2020-05-27 21:43:59

标签: reactjs azure azure-active-directory adal msal

我一直在尝试从Flask迁移Web应用程序以作出反应,但是我无法获得有效的访问令牌。 在Flask中,我使用了 adal 并具有以下代码:

authority_host_uri = 'https://login.microsoftonline.com'
tenant = '<my tenant id>'
authority_uri = authority_host_uri + '/' + tenant
resource_uri = 'https://management.core.windows.net/'
client_id = '<my client id>'
client_secret = '<my client secret>'
context = adal.AuthenticationContext(authority_uri, api_version=None)
mgmt_token = context.acquire_token_with_client_credentials(resource_uri, client_id, client_secret)

,回复为

{'tokenType': 'Bearer',
 'expiresIn': 3599,
 'expiresOn': '2020-05-27 18:22:07.128189',
 'resource': 'https://management.core.windows.net/',
 'accessToken':'<the access token that was needed>'
 'isMRRT': True,
 '_clientId': '<client id info>',
 '_authority': '<authority above>'}

但是,当我试图在React中的msal中实现相同的东西时,我从

获得的访问令牌
const tokenRequest = {
    scopes: [clientId + "/user_impersonation"]
};    
const response = await myMSALObj.acquireTokenSilent(tokenRequest)

无效,因为它将从Azure目录API收到403错误,因为我从Flask获取的访问令牌工作得很好。是否存在不同类型的访问令牌,或者是由于作用域的缘故?可以和adal在Flask中做完全一样的事情吗(就像不需要指定范围,只需要使用客户端机密来获取正确的访问密钥?)

1 个答案:

答案 0 :(得分:1)

范围不正确。您要访问此资源https://management.core.windows.net/

范围应为:

scopes: ["https://management.core.windows.net/.default"]

参考:

https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-v1-app-scopes#scopes-to-request-access-to-all-the-permissions-of-a-v10-application

这是由于权限不足所致,您可以按照以下过程授予管理员同意:

enter image description here

enter image description here

您还可以通过浏览器交互获得管理员同意:

https://login.microsoftonline.com/{tenant}/adminconsent?client_id={your-client_id}&state=12345&redirect_uri={your-redirect_uri}

enter image description here