MSAL配置API Scope遇401错误:省略api://前缀为何可行?
问题分析与解决
为什么api://MYGUID/user_impersonation会导致401?
当你用api://MYGUID/user_impersonation作为Scope请求令牌时,MSAL生成的JWT令牌中aud(受众)字段会被设置为api://MYGUID。但你的API是通过Easy Auth配置的,默认情况下Easy Auth会把**纯Client ID(MYGUID)**作为合法受众(ValidAudience)进行校验,不会识别带api://前缀的标识符,因此出现受众不匹配的401错误。
改用MYGUID/user_impersonation作为Scope时,MSAL生成的令牌aud字段会直接是MYGUID,刚好匹配Easy Auth的ValidAudience设置,所以能正常通过校验。
错误信息里的null受众是什么意思?
错误里的validationParameters.ValidAudiences: 'null'是Easy Auth默认配置的体现:它只单独指定了一个合法受众(ValidAudience = MYGUID),没有配置多个受众列表(ValidAudiences),所以这个参数值为null。这只是验证逻辑里的参数状态,并非允许null作为合法受众。
额外说明
微软文档里未明确提及这个细节,是因为Easy Auth针对不同场景(自定义API vs 内置服务)的受众校验逻辑存在差异。对于用Easy Auth托管的自定义API,默认就是用纯Client ID作为受众,因此Scope里不需要加api://前缀。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

