MIP SDK对接AD RMS及ADFS时出现MSIS9622客户端认证失败问题咨询
这个MSIS9622错误是ADFS侧客户端身份校验不通过导致的,需要从ADFS配置和代码逻辑两方面修改,具体修改点如下:
ADFS应用注册配置修正
首先在ADFS服务器中确认你注册的应用配置:- 应用类型必须选择「公共客户端」,和代码中使用的
PublicClientApplication类型匹配 - 重定向URI必须和代码中
WithRedirectUri传入的http://localhost:50069完全一致,包括协议、端口、路径都不能有偏差 - 为该应用委派AD RMS服务的访问权限,确保资源标识和你代码中传入的RMS服务地址
https://adrms.server.com完全匹配 - 确认应用启用了OAuth 2.0授权码流,公共客户端默认可能未开启该权限
- 核对你代码中使用的
_appInfo.ApplicationId和ADFS注册的客户端ID完全一致,大小写敏感
- 应用类型必须选择「公共客户端」,和代码中使用的
AuthDelegateImplementation代码修改
你现有的代码有两处不适配本地ADFS的逻辑:- 移除scope的
.default后缀拼接逻辑:本地部署的ADFS(2019及更早版本)不支持OAuth 2.0的/.defaultscope格式,直接使用传入的resource作为scope即可,修改对应代码:// 删掉原有拼接.default的逻辑,替换为下面这行 string[] scopes = { resource }; - 把
PublicClientApplication的初始化逻辑移出AcquireToken方法:每次调用AcquireToken都新建实例会导致账号缓存失效,建议把_app的初始化放到类的构造函数中,只初始化一次 - 可选:如果你的ADFS使用自签名证书,可添加证书验证回调跳过证书校验(仅测试环境使用),或者确保客户端信任ADFS的根证书
- 移除scope的
可选的引擎配置优化
你当前使用的internal\\sysadmin是域账号格式,部分ADFS配置可能无法识别该格式,可以尝试替换为UPN格式(例如sysadmin@你的域名.com)传入Identity参数,兼容性更好
内容的提问来源于stack exchange,提问作者Jan Martin
相关产品推荐
相关产品推荐

