Azure MSAL-身份验证无法实现userinfo请求

时间:2020-03-18 07:45:01

标签: azure authentication active-directory openid msal

我已经使用 Implicit Flow 在我的角度应用程序中实现了msal库。我可以使用Microsoft广告帐户登录,并且拥有用于api使用的身份验证请求所需的令牌。 当我使用https://jwt.ms/解码令牌时,我可以看到aud键具有我的客户端应用ID 的值,userinfo的网址应该看起来如何? 如果我将使用文档中描述的这些端点,则我将使用无效令牌出错: https://graph.microsoft.com/oidc/userinfohttps://graph.microsoft.com/v1.0/me/

{
"error": {
    "code": "InvalidAuthenticationToken",
    "message": "Access token validation failure. Invalid audience.",
    "innerError": {
        "request-id": "8177b64f-c899-48c3-aceb-xxxxxxxxx",
        "date": "2020-03-18T07:41:04"
    }
}

}

我忘记了配置模块。

...
MsalModule.forRoot({
                    auth: {
                        clientId: environment.CLIENT_ID,
                        redirectUri: environment.REDIRECT_URI,
                        postLogoutRedirectUri: environment.POST_LOGOUT_REDIRECT_URI,
                        authority: environment.AUTHORITY,
                    },
                    cache: {
                        cacheLocation: 'localStorage',
                        storeAuthStateInCookie: true,
                    }
                },
                {
                    popUp: false,
                    consentScopes: [
                        'user.read',
                        'openid',
                        'profile',
                    ],
                    unprotectedResources: [],
                    protectedResourceMap: [
                        ['https://graph.microsoft.com/v1.0/me', ['user.read']]
                    ]
                })
...

其中: 授权网址:授权:'https://login.microsoftonline.com/xxxxtenant_idxxxx' 客户ID:应用注册客户ID

2 个答案:

答案 0 :(得分:0)

如果要调用Microsoft Graph API,则需要获取具有正确的(Microsoft graph api)受众的访问令牌。

获取访问令牌时,应使用https://graph.microsoft.com/User.Read或仅使用User.Read作为范围。您可以在app.module.ts

中检查值

此外,请记住在Azure门户上为您的应用程序添加User.Read权限。应用程序注册->您的应用程序-> API权限->添加权限->选择Microsoft Graph API->委托权限->检查所需的权限。

更新

enter image description here

参考:

MSAL Angular to login, logout, protect a route, and acquire an access token for Microsoft Graph.

答案 1 :(得分:0)

已解决。问题出在指定的端点。当我从角度请求图形时,应用拦截器将处理此端点并为图形使用范围(user.read),然后将分配正确的令牌。 在我尝试授权后复制令牌并将其粘贴到邮递员之前。所以,是的,令牌不是全部都有效。谢谢您的帮助。