使用 MSAL 获取访问令牌失败

问题描述 投票:0回答:1

我正在开发一个名为 emailservice 的 Azure Web 应用程序服务,该服务应该与在 Office365 Exchange Online 中创建的邮箱进行通信。假设邮箱的用户帐户是 x @y-domain.com。

网络应用程序应该从收件箱检索消息或发送的消息。我决定使用 Microsoft graph api 来解决这个问题。

为了能够成功调用图形 API,我需要在 Azure 上注册该应用程序。我也这样做过。已授予委派访问权限,并且图形下的 Mail.ReadWrite 和 Mail.send 权限已由管理员授予。我们在同意方面也做得很好。 我正在使用 MSAL 来获取令牌。 `y

const authClient = new msal.ConfidentialClientApplication({
    auth: {
        clientId,
        clientSecret,
        authority: `${azureActiveDirectoryEndPoint}${tenantId}`,
    }
});
function getToken(): Promise<string> {
    return authClient.acquireTokenByClientCredential({
        scopes,
    }).then(authResult =>{
        if (!authResult) {
            throw new Error('Authentication failed!')
        }
        return authResult.accessToken;
    })
}
    async retrieveNewEmails() {
        

        const accessToken = await getToken();
        // some code
    }

我目前正在本地计算机上测试此代码。我对 acquireTokenByClientCredential 的调用失败。我有几个问题。

  • 这是调用我的场景以获得 accessToken 的正确方法吗

  • 如果方法正确,我想我没有正确设置范围 我尝试过几种不同的范围。 我认为我对范围及其应包括的内容没有正确的理解 我知道它应该包括终点“https://graph.microsoft.us/v1.0/” 我认为它也应该包括用户帐户。我想它还应该包括 [电子邮件受保护] 我不确定它应该有任何权限指示或不像 Mail.ReadWrite

  • 这是我尝试过的方法和错误消息 const 范围 = ['https://graph.microsoft.us/v1.0/[电子邮件受保护]']; 没有生成令牌,它提示我错误“ERROR [ExceptionsHandler]
    invalid_scope:1002012 - [2024-03-13 22:26:25Z]:AADSTS1002012:提供的范围值 https://graph.microsoft.us/v1.0/me 无效。客户端凭证流必须有范围 资源标识符(应用程序 ID URI)后缀为 /.default 的值。 “

        Why /.default?
    
     const scopes = ['https://graph.microsoft.us/v1.0/ [email protected]'/.default'];
           No token is generated and it prompts me with error saying “ERROR [ExceptionsHandler] 
           invalid_resource: 500011 - [2024-03-13 22:21:50Z]: AADSTS500011: The resource principal named 
           https://graph.microsoft.us/v1.0/x was not found in the tenant named * . This can happen if 
           the application has not been installed by the administrator of the tenant or consented to by 
           any user in the tenant. You might have sent your authentication request to the wrong tenant.”
    

如果您能帮我找到丢失的东西,我将不胜感激。

如上所述,我尝试了上面两种不同的范围。

azure access-token msal
1个回答
0
投票

请尝试将范围更改为

https://graph.microsoft.us/.default
。您可能会发现此链接对于理解范围很有帮助:https://learn.microsoft.com/en-us/entra/identity-platform/scopes-oidc

© www.soinside.com 2019 - 2024. All rights reserved.