我从GitHub下载了示例,以试用Azure AD B2C https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi
我已经为我的AADB2C重新配置了此Web应用程序,并且一切正常。
为了也尝试使用MSAL.js,我添加了一个新页面,该页面实现了登录用户的get访问令牌。用户使用服务器端代码登录。 但是,我无法为登录的用户获取缓存的用户会话,因为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。
如果用户使用服务端代码登录,那么任何人都可以通过静默获取访问令牌。
答案 0 :(得分:0)
有同样的问题。 奇怪的是,当您的.js应用程序开发人员Msal.js遇到安全问题时, 采用在.net应用程序中启动的会话。尽管客户端不是放置这种安全机制的正确位置。 这是我找到该信息的地方:related issue on github
通过将会话ID或login_hint添加到AcquisitionTokenSilent(),可以在具有msal.js的.js应用程序中采用.net启动的会话。可以在这里找到更多信息:official msal.js documentation