msal.js不同环境下AuthenticationResult返回值不一致,缺少expiresOn属性
从两个环境的/token接口返回结果可以直接定位核心前提:QA环境的令牌请求没有返回access_token,而expiresOn是MSAL库基于Access Token的expires_on字段计算生成的AuthenticationResult属性,at_hash是ID Token中用于绑定对应Access Token的声明,没有Access Token的情况下这两个字段自然缺失。可能的具体原因如下:
- Scope请求配置错误:核对两个环境的
myloginScopes变量取值,QA环境大概率配置了空数组、拼写错误的scope值,或是请求的scope未在QA的ADB2C应用注册中完成授权。ADB2C收到无效/未授权的scope请求时会自动忽略对应scope,最终返回空scope列表且不返回Access Token。 - ADB2C应用注册配置差异:检查QA环境的应用注册是否已正确暴露API并创建对应的自定义scope,若开发环境已配置对应scope但QA环境漏配,也会导致scope请求失败,无法返回Access Token。
- 用户流策略配置不一致:即使你认为配置完全一致,仍需单独检查QA环境基础用户流的「令牌」配置页:是否开启了「发出访问令牌」选项,是否在自定义声明配置中裁剪了
at_hash、expires_on等默认返回字段。 - MSAL实例配置差异:核对QA环境的
msalConfig配置,重点检查authority是否指向正确的QA租户和用户流、clientId是否为QA环境的应用ID,错误的租户/应用ID配置也会导致令牌请求异常。 - 测试账号权限问题:确认QA环境测试用的用户账号,是否已被分配对应API的访问权限,无权限的账号请求对应scope时ADB2C不会返回Access Token。
内容的提问来源于stack exchange,提问作者conor909
相关产品推荐
相关产品推荐

