如果用户从 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