authProvider.getAccessToken()为每个API调用调用身份验证端点,而不是从缓存中获取它。
我不知道问题出在Msal中的AcquireTokenSilent还是react-aad-msal中的getAccessToken。
使用msal1.2.1和react-aad-msal2.3.2

Api调用帮助器:
import { config } from '../config';
import { authProvider } from './../authProvider';
export const callApi = async (method: 'GET' | 'POST' | 'PUT' | 'DELETE', path: string, data?: any) => {
const token = await authProvider.getAccessToken();
const res = await fetch(`${config.API_ENDPOINT}/api/${path}`, {
method,
headers: {
Authorization: 'Bearer ' + token.accessToken,
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
return res.json();
};配置:
import { MsalAuthProvider, LoginType } from 'react-aad-msal';
// Msal Configurations
const config = {
auth: {
authority: 'https://login.microsoftonline.com/<my tenant id>',
clientId: '<my client id>',
},
cache: {
cacheLocation: 'localStorage',
storeAuthStateInCookie: false,
},
};
// Authentication Parameters
const authenticationParameters = {
scopes: ['offline_access'],
};
// Options
const options = {
loginType: LoginType.Redirect,
tokenRefreshUri: window.location.origin + '/auth.html',
};
export const authProvider = new MsalAuthProvider(config, authenticationParameters, options);发布于 2020-01-31 15:56:28
我修复了这个问题,从作用域中删除了'offline_access‘,因为它似乎是隐式添加的,手动添加它会导致MSAL找不到缓存的令牌,因为作用域被用作键。
我还必须添加我的自定义作用域,在我的例子中是'User.Read‘
const authenticationParameters = {
scopes: ['User.Read'],
};发布于 2020-01-27 18:48:08
我遇到了同样的问题,尝试将所需的作用域添加到访问令牌请求中。
const token = await authProvider.getAccessToken({
scopes: ['offline_access']
});https://stackoverflow.com/questions/59789433
复制相似问题