我有两个网站,一个是Angular应用程序,另一个是WebAPI。
当我在前端使用MSAL.js调用WebAPI时,没有附加任何令牌(因为CORS)。
我知道我需要设置protectedResourceMap,但我找不到清晰的解释如何设置它。
我可以找到很多示例,但没有一个给出让我能够理解的解释。
请问有人能提供任何建议吗?
我刚开始学习这个,但是在文档中找到了这些信息:
protectedResourceMap:资源到作用域的映射 {"https://graph.microsoft.com/v1.0/me", ["user.read", "mail.send"]}。MSAL 内部使用此映射表,在 WebApi 调用中自动附加令牌。这仅对 CORS 调用是必需的。
我对给定的示例的理解是:
export const protectedResourceMap:[string, string[]][]=[
['your api endpoint',['scope 1', 'scope 2', 'scope n']] // example
['https://buildtodoservice.azurewebsites.net/api/todolist',['api://a88bb933-319c-41b5-9f04-eff36d985612/access_as_user']], // api you host
['https://graph.microsoft.com/v1.0/me', ['user.read']] // ms graph api - uses short scope names with no uri prefix
];
因此,在调用路径“你的API端点”时,包括与范围“范围1”,“范围2”,“范围n”相关联的令牌。
对于我的Angular应用程序,我正在使用这个:
export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {
const protectedResourceMap = new Map<string, Array<string>>();
protectedResourceMap.set('https://graph.microsoft.com/v1.0/me', ['user.read']);
protectedResourceMap.set('https://zz-api.azurewebsites.net/api', ['api://2132131-312312-3123-31231-3131/SomeScope']);
return {
interactionType: InteractionType.Redirect,
protectedResourceMap,
};
}
然后在应用程序模块的提供者注册中:
{
provide: MSAL_INTERCEPTOR_CONFIG,
useFactory: MSALInterceptorConfigFactory,
},
MsalInterceptor
将令牌附加到我的API调用中,但我不确定如何成功地实现它。我有一个开放性问题(https://stackoverflow.com/questions/61048708/understanding-protectedresourcemap-in-msalangularconfiguration-to-pass-token)。任何意见都非常有帮助。 - Maddy