如果用户从 msal .net 代码登录,则无法使用 msal.js 静默获取访问令牌

Posted

技术标签:

【中文标题】如果用户从 msal .net 代码登录,则无法使用 msal.js 静默获取访问令牌【英文标题】:unable to obtain access token silently using msal.js if user is logged in from msal .net code 【发布时间】:2019-11-19 03:28:22 【问题描述】:

我从 GitHub 下载了示例以试验 Azure AD B2C https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi

我已经为我的 AADB2C 重新配置了这个 Web 应用程序并且一切正常。

为了还试验 MSAL.js,我添加了一个新页面,该页面实现了登录用户的获取访问令牌。用户使用服务器端代码登录。 但是,我无法为登录的用户获取缓存的用户会话,因为 MSAL.js 似乎不知道用户已经从服务器端代码登录,反之亦然。

这是我用来获取登录用户会话并尝试静默获取令牌的代码。

if (msalInstance.getAccount()) 
    var tokenRequest = 
        scopes: ["user.read", "mail.send"]
    ;
    msalInstance.acquireTokenSilent(tokenRequest)
        .then(response => 
            // get access token from response
            // response.accessToken
        )
        .catch(err => 
            // could also check if err instance of InteractionRequiredAuthError if you can import the class.
            if (err.name === "InteractionRequiredAuthError") 
                return msalInstance.acquireTokenPopup(tokenRequest)
                    .then(response => 
                        // get access token from response
                        // response.accessToken
                    )
                    .catch(err => 
                        // handle error
                    );
            
        );
 else 
    // user is not logged in, you will need to log them in to acquire a token

即使用户已经使用 Microsoft.Identity Code (MSAL C# lib) 登录,msalInstance.getAccount() 函数也将始终返回 null。

如果用户使用服务端代码登录,是否可以静默获取访问令牌。

【问题讨论】:

我看不出这个问题与 C# 有什么关系 谢谢我删除了c#标签。 可以直接使用msal.js登录,为什么使用msal c# lib登录? 【参考方案1】:

有同样的问题。 奇怪的是,开发人员 Msal.js 在您的 .js 应用程序时存在安全问题 采用在您的 .net 应用程序中启动的会话。尽管客户端不是放置这种安全机制的正确位置。 这是我找到该信息的地方:related issue on github

您可以通过将会话 id 或 login_hint 添加到 acquireTokenSilent() 中,在您的 .js 应用程序中采用 .net 启动的会话和 msal.js。更多信息可以在这里找到:official msal.js documentation

【讨论】:

以上是关于如果用户从 msal .net 代码登录,则无法使用 msal.js 静默获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

登录后如何获取用户名?我正在尝试使用 MSAL(@azure/msal-angular)进行 Azure 登录

仅当未使用 @azure/msal-react 进行身份验证时才重定向 onLoad

适用于 Android 的 MSAL 无法执行 B2C 登录

我应该在 MSAL.NET 中使用哪种类型的 ApplicationBuilder?我正在使用 ASP.NET Core Web Api

ADAL 到 MSAL 迁移保护 Web API

MSAL.NET(权限设置不授予具有 CLSID 的 COM 服务器应用程序的本地激活权限)