为Azure AD的Access Token添加自定义声明遇AADSTS50146错误求助
解决方案:AADSTS50146 错误及应用专用签名密钥配置
为什么会触发这个错误?
当你在应用注册Manifest中设置acceptMappedClaims: true时,Azure AD要求你的应用必须配置应用专用签名密钥。原因是:自定义声明映射后的令牌需要使用应用专属的密钥进行签名,以此保证令牌的完整性和唯一性——默认令牌用Azure AD全局密钥签名,而定制化的令牌需要用你自己的应用密钥来标识其针对你的业务场景做了修改。
应用专用签名密钥的创建与配置步骤
- 登录Azure门户,进入你的应用注册页面(注意不是企业应用)。
- 切换到「证书和密码」>「证书」标签页:
- 点击「新建证书」,选择「创建自签名证书」。
- 填写证书名称,设置有效期(比如1年),然后点击「创建」。
- 生成后,证书会出现在列表中,状态为「有效」即可。
- 回到对应的企业应用页面,进入「单点登录」>「属性和声明」,确认之前添加的
user.companyname、user.department、user.jobtitle声明映射配置正确。 - 再次打开应用注册的Manifest,确保
acceptMappedClaims值为true,同时检查signInAudience是否匹配你的场景(比如AzureADMyOrg)。 - 等待5-10分钟让配置生效,重新启动Next.js应用测试登录流程。
更简单的替代方案(无需配置签名密钥)
如果不想折腾签名密钥,可以改用可选声明来添加所需属性,无需修改Manifest:
- 进入应用注册的「令牌配置」>「添加可选声明」。
- 选择「访问令牌」或「ID令牌」(根据你在Next.js中使用的令牌类型选择)。
- 在可选声明列表中找到
department、jobTitle、companyName,勾选后添加。 - 保存配置后,重新获取令牌即可看到这些属性已包含在内。
内容的提问来源于stack exchange,提问作者Paulius
相关产品推荐
相关产品推荐

