iOS14及以下版本初始化PublicClientApplicationBuilder钥匙串访问报错
问题根因
- iOS系统版本间的keychain校验逻辑差异:iOS 15对keychain访问组的校验做了兼容优化,会自动补全当前应用的Team ID作为访问组前缀,但iOS 14及更低版本要求必须准确匹配完整的访问组前缀,否则会识别为Team ID为null,触发keychain访问权限错误。
- 打包签名环节的变量解析异常:Debug模式下Xcode会自动将Entitlements.plist中的
$(AppIdentifierPrefix)变量替换为实际的开发者Team ID,但企业分发/公司门户上传的Release签名流程中,部分场景下该变量未被正确替换,导致keychain权限配置失效。 - 依赖包版本缺陷:你当前使用的Microsoft.Identity.Client 4.36.2版本存在已知的低版本iOS系统下keychain前缀自动识别异常问题,该问题在后续版本中已被修复。
解决方案
- 硬编码keychain访问组前缀:将Entitlements.plist中的
$(AppIdentifierPrefix)com.microsoft.adalcache替换为实际Team ID.com.microsoft.adalcache,你的Team ID可在苹果开发者账号的证书或应用标识详情页查询。 - 升级依赖包版本:将Microsoft.Identity.Client升级到4.47.2及以上版本,直接修复低版本iOS系统下的keychain识别缺陷。
- 简化keychain配置:如果你的应用不需要和其他同开发者应用共享ADAL身份缓存,可以直接移除初始化代码中的
.WithIosKeychainSecurityGroup("com.microsoft.adalcache")配置项,MSAL会默认使用应用专属的keychain组,不会触发跨组访问的前缀校验。 - 校验Release签名配置:确认项目iOS Bundle Signing设置中,Release模式的Entitlements.plist文件路径和Debug模式完全一致,避免打包时未加载权限配置。
内容的提问来源于stack exchange,提问作者abmuiz
相关产品推荐
相关产品推荐

