我试图用MSAL替换ADAL。用户第一次访问应用程序时,它会正确地进行身份验证,但我遇到的情况是,我们的应用程序在一段时间后进入重定向循环。我假设这是令牌过期的时候(我相信默认是1小时)。当应用程序在一个小时后空闲时,有时会发生这种情况,这就是为什么我认为这可能与获取新令牌的方式以及我刷新浏览器窗口的方式有关。
** AuthProvider.ts **
import { Configuration } from 'msal
// Msal Configurations
const config = {
auth: {
authority: 'https://login.microsoftonline.com/' + process.env.REACT_APP_AAD_TENANT,
clientId: process.env.REACT_APP_AAD_CLIENT_ID,
postLogoutRedirectUri: window.location.origin,
redirectUri: window.location.origin,
validateAuthority: true,
navigateToLoginRequestUrl: false,
},
cache: {
cacheLocation: 'sessionStorage', // This configures where your cache will be stored
storeAuthStateInCookie: false, // Set this to "true" if you are having issues on IE11 or Edge
},
} as Configuration
// Authentication Parameters
const authenticationParameters = {
scopes: ['openid', 'api://' + process.env.REACT_APP_AAD_SCOPES],
}
// Options
const options = {
loginType: LoginType.Redirect,
tokenRefreshUri: window.location.origin + '/auth.html',
}
export const authProvider = new MsalAuthProvider(config, authenticationParameters, options)然后,当调用我们的api时,我想我可以像下面这样调用getAccessToken方法,然后我将静默地接收一个有效的令牌,但我只是在一个重定向循环中结束。
我想知道为什么它在用户第一次访问应用程序时起作用,而不是在试图刷新令牌时起作用。我认为Azure的配置是正确的,因为它第一次就起作用了。这可能是iframe /浏览器的问题,还是代码问题?
发布于 2020-07-21 08:29:10
使用refresh token获取合法token,需要调用msal.js token接口acquireTokenSilent。有关如何使用msal.js获取令牌的更多信息,请参阅this document。
您可以参考您的方案的msal.js sample。
https://stackoverflow.com/questions/62927580
复制相似问题