如何使用 Azure AD 范围和 oidc-client.js 检索用户信息?

How to retrieve user info with Azure AD scopes and oidc-client.js?

我很困惑在将 azure 广告范围与 oidc-client.js.

一起使用时如何获取访问令牌和用户信息详细信息

我在门户中针对我的应用程序具有以下范围...

然后我的用户管理器设置如下....

var settings: UserManagerSettings = {
    authority: `https://login.microsoftonline.com/${tenantId}`,
    client_id: clientId,
    redirect_uri: "http://localhost:3000/authcallback",
    post_logout_redirect_uri: "http://localhost:3000/authcallback",
    response_type: "token id_token",
    scope: `api://${clientId}/access_user_data openid`,
    popup_redirect_uri: "http://localhost:3000/authcallback",
    silent_redirect_uri: "http://localhost:3000/authcallback",
    automaticSilentRenew: true,
    loadUserInfo: true,
    metadata: {
        userinfo_endpoint: "https://graph.microsoft.com/oidc/userinfo",
        authorization_endpoint: `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/authorize`,
        issuer: `https://login.microsoftonline.com/${tenantId}/v2.0`,
        jwks_uri: `https://login.microsoftonline.com/${tenantId}/discovery/v2.0/keys`
    }
};

当我使用 signinRedirect 登录时,我得到一个 access_token 返回到我的回调,但是在执行 getUser().[=25 时,对 https://graph.microsoft.com/oidc/userinfo 的调用失败并未经授权=]

oidc-client.min.js:1 GET https://graph.microsoft.com/oidc/userinfo 401 (Unauthorized)

访问令牌似乎确实适用于我的 api,它需要 api://${clientId}/access_user_data 范围。

发现文档here列出了以下可用范围

"scopes_supported": [
    "openid",
    "profile",
    "email",
    "offline_access"
]

我认为这会起作用,因为我还包括 openid 范围。请注意,如果我只有像 scope: "openid" 这样的 openid 作用域,getUser() 可以工作,但是它没有我调用 api.[=25 所需的作用域=]

我做错了什么?

谢谢,

在一些研究尝试将 loadUserInfo 设置为 false 解决了我的问题后遇到了同样的问题,请尝试相同的方法