当我根据以下内容请求受保护 api 的范围时(省略 api 客户端 ID):
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://pz-job-tracker-api.azurewebsites.net', ['api://MYGUID/user_impersonation']);
return {
interactionType: InteractionType.Redirect,
protectedResourceMap
};
}
我收到 401 消息,显示观众“IDX10214:观众验证失败”。受众:'api://MYGUID'。不匹配:validationParameters.ValidAudience:'MYGUID'或validationParameters.ValidAudiences:'null'。'
如果我稍微改变一下我的范围,如下所示:
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://pz-job-tracker-api.azurewebsites.net', ['MYGUID/user_impersonation']);
return {
interactionType: InteractionType.Redirect,
protectedResourceMap
};
}
有效!但为什么?我在文档中找不到任何地方说您需要省略客户端 id 的 URI 部分?为什么根据错误消息允许空观众?这一切都是按照 MS 关于简单身份验证的教程进行设置的,其中我的 API 应用程序中没有身份验证代码,全部由 Entra 和 Easy Auth 处理。
从在应用服务应用程序中启用 Microsoft Entra ID:
始终隐式考虑配置的应用程序(客户端)ID 成为允许的观众。如果您的应用程序代表一个 API 将被其他客户端调用,您还应该添加应用程序 您在应用注册时配置的 ID URI。有一个限制 允许的受众列表中总共 500 个字符。