我正试图使用@Azure/msal-angular从Azure Active directory注册用户,更准确地说,我尝试了以下教程
这些是我对项目所做的更改
export function MSALInstanceFactory(): IPublicClientApplication {
return new PublicClientApplication({
auth: {
clientId: 'my_real_client_id,
redirectUri: 'http://localhost:4200',
authority: 'https://login.microsoftonline.com/my_real_tenant_id',
postLogoutRedirectUri: '/'
},
cache: {
cacheLocation: BrowserCacheLocation.LocalStorage,
storeAuthStateInCookie: isIE, // set to true for IE 11
},
system: {
loggerOptions: {
loggerCallback,
logLevel: LogLevel.Info,
piiLoggingEnabled: false
}
}
});
}
export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {
const protectedResourceMap = new Map<string, Array<string>>();
protectedResourceMap.set('https://graph.microsoft.com/v1.0/me', ['user.read']);
protectedResourceMap.set('http://localhost:5000/', ['profile']);
return {
interactionType: InteractionType.Redirect,
protectedResourceMap
};
}
问题是MsalInterceptor将V1令牌添加到我的API请求的URL中,该请求需要V2。
Azure被配置为访问TokenAcceptedVersion:2
如果需要,我可以提供更多信息
更新
在我的情况下,问题是由于指定的范围,API对于";user.read">和";配置文件">需要V1访问令牌
虽然您已经解决了这个问题,但我想澄清更多细节。
事实上,这不是"权限";user.read";以及";配置文件";需要V1 accessToken。实际原因是:
访问令牌版本由清单中应用程序/API的配置决定。如果您想要V2访问令牌,则必须将清单的accessTokenAcceptedVersion部分更改为2。这也是为什么当您请求访问令牌时,您无法控制将从客户端应用程序获得哪个版本的访问令牌的原因。
我们无法从Microsoft Graph端修改accessTokenAcceptedVersion
。
因此得出的结论是,MS Graph的一个访问令牌和那些总是V1访问令牌。