使用MIP SDK通过托管身份获取AIP解密令牌遇权限拒绝问题求助
解决MIP SDK托管身份获取AIP令牌的权限配置问题
关键配置步骤
1. 给托管身份分配AIP权限
- 直接给目标托管身份(系统/用户分配)添加Azure Rights Management Service的应用权限,选择
Content.DelegatedReader(解密用)或Content.DelegatedWriter,必须完成全局管理员同意。 - 注意:不要给Azure AD应用加权限,托管身份是独立的AD身份,直接在其权限面板配置。
2. 修正联合凭据配置
- 联合凭据场景设为
ManagedIdentity,同时:- 受众(Audience)必须设为
https://api.aadrm.com(AIP服务的资源ID) - 令牌颁发者(Issuer)格式为
https://sts.windows.net/{你的租户ID}/,要和托管身份的租户一致
- 受众(Audience)必须设为
3. 调整MIP SDK的令牌获取逻辑
- 获取令牌时指定资源为
https://api.aadrm.com,示例C#代码:
// 托管身份令牌提供者,指定AIP资源 var tokenProvider = new ManagedIdentityTokenProvider("https://api.aadrm.com"); var appInfo = new ApplicationInfo("你的应用ID", "你的租户ID", "你的应用名称"); var mipContext = MIP.CreateApplication(appInfo, tokenProvider, new ApplicationSettings());
- 确保运行环境已启用托管身份(比如Azure App Service/VM/Function中已开启对应身份)
4. 验证令牌有效性
- 用Azure CLI获取托管身份的AIP令牌:
az account get-access-token --resource https://api.aadrm.com --identity
- 解析令牌(可本地用jwt.ms),检查:
aud字段是否为https://api.aadrm.comroles字段是否包含分配的AIP权限iss是否匹配租户STS端点
常见问题修复
- 若令牌无AIP权限角色:检查权限是否分配给托管身份,且已完成管理员同意
- 本地开发时:需用Azure CLI登录并指定托管身份(用户分配身份需加
--identity {身份ID})
内容的提问来源于stack exchange,提问作者AlexanderP
相关产品推荐
相关产品推荐

