reactjs - 带有 msal-react 包装器 acquireTokenSilent 的 msal-browser 不会从缓存中获取访问令牌
问题描述
@azure/msal-browser 2.14.1 @azure/msal-react 1.0.0-beta.2
我们正在使用自定义 b2c 策略
当我使用 PublicClientApplication 实例调用 acquireTokenSilent 时,它没有从缓存中获取访问令牌,但我可以看到访问令牌存储在 sessionStorage 中,看起来像{homeAccountId}-{tenantSubdomain}.b2clogin.com-AccessToken-{aud}-{tid}
. 与 refreshToken、clientInfo 和 idToken 格式类似。它确实按预期从端点成功返回令牌。
在 B2C 重定向 uri 中设置为 SPA 并禁用隐式流
配置:
const config = {
auth: {
clientId: applicationID,
authority: signInAuthority,
knownAuthorities: [
`${tenantSubdomain}.b2clogin.com`,
],
redirectUri: reactRedirectUri,
validateAuthority: false,
navigateToLoginRequestUrl: false,
postLogoutRedirectUri: reactRedirectUri,
},
system: {
loggerOptions: {
loggerCallback: (level, message, containsPii) => {
if (containsPii) {
return;
}
switch (level) {
case LogLevel.Error:
console.error(message);
return;
case LogLevel.Info:
console.info(message);
return;
case LogLevel.Verbose:
console.debug(message);
return;
case LogLevel.Warning:
console.warn(message);
return;
}
},
piiLoggingEnabled: false,
},
windowHashTimeout: 60000,
iframeHashTimeout: 6000,
loadFrameTimeout: 0,
tokenRenewalOffsetSeconds: 1,
// allowRedirectInIframe: true,
},
cache: {
cacheLocation: "sessionStorage",
storeAuthStateInCookie: true,
},
};
要求:
const signInRequest = {
scopes: [
msalInstance.config.auth.clientId,
],
};
const silentRefreshRequest = {
scopes: [
msalInstance.config.auth.clientId,
],
};
offline_access、openid 和 profile 会自动添加到请求中,我在这些范围上尝试了许多不同的变体。
获取令牌静音:
const res = await msalInstance.acquireTokenSilent({
...silentRefreshRequest,
account: msalInstance.getActiveAccount(),
});
我再次尝试了一些不同的变化。有什么我遗漏的东西可以解决从缓存中获取它的问题,还是我只需要解决它?
解决方案
在使用 B2C 时请求您自己的 clientId 作为范围时,这是一个已知问题。B2C 服务返回“/”的“范围”值,而不是破坏缓存的 clientId。他们正在修复,但现在要解决它,您应该在您的应用注册上创建一个自定义范围并改用它。您可以跟踪此问题,以便在推出修复程序时收到通知。
推荐阅读
- c# - 反序列化 JSON USGS 地震目录 API
- php - Laravel 作业和队列未按预期工作
- excel - 如何使用openpyxl调整excel中的行高
- flutter - 如何在flutter web中监听(“关闭”事件)文件下载窗口?
- reactjs - 未找到 npm 包 - SyntaxError: Unexpected token '<'
- swift - 自动布局按钮不正确
- reactjs - React 功能组件 onChange 问题
- sqlite - 如何从 Sqlite 逐块流式传输数据?
- java - PDFbox 2.0.20 - 新的 PagePane() 抛出 RuntineException
- html - Django - 视频文件未加载到视图中