【问题标题】:Xamarin with MSAL cannot save access token as Keychain Access Groups changed during Ad-Hoc provisioning具有 MSAL 的 Xamarin 无法将访问令牌保存为在 Ad-Hoc 预配期间更改的钥匙串访问组
【发布时间】:2026-01-19 23:50:01
【问题描述】:

我们已将最新的 MSAL 库添加到 Xamarin 项目中,并将钥匙串共享功能添加到权利 plist:

该应用在开发人员计算机上构建正常,并且该应用针对 Azure AD B2C 进行了正确的身份验证。

当我们通过 ADO 构建并在 App Center 中发布(Ad-Hoc 预配)时,应用构建,并且似乎针对 Azure AD B2C 进行身份验证,但不与我们的其他 Azure 资源(API、存储等)进行通信。 ) 似乎未找到 Keychain 访问组,并且虽然身份验证正常进行,但 MSAL 未能将访问令牌保存在 Key Chain 中。

iOSTokenCacheAccessor.Save (System.String account, System.String service, System.String generic, System.Int32 type, System.String value)

Microsoft.Identity.Client.MsalClientException: The application does not have keychain access groups enabled in the Entitlements.plist. As a result, there was a failure to save to the iOS keychain.

我们认为这是因为在 Ad-Hoc 配置期间,在设备 ID 包含在配置文件中后,应用会重新签名,但 Ad-Hoc 配置文件权利部分仅包含 [app id]。* 而不是 com .microsoft.adalcache 值。

  1. entitlements.plist 是否在构建过程中合并到配置文件中,即,钥匙串组添加到 plist 的权利部分?
  2. 如果是这样,在构建管道中会发生什么以及何时发生?
  3. Ad-Hoc 预配如何在这种情况下工作?

非常感谢任何帮助,因为这目前正在阻止我们的发布。

【问题讨论】:

  • 你能在MSAL repo 中打开一个问题并链接到这篇文章吗?谢谢。
  • MSAL .NET 强制您提供一个 teamId,它将在 dogfood 和开发之间发生变化。在 MSAL 中打开问题将使我们能够跟踪问题并让您及时了解修复。 MSAL 需要自行解析 teamId。
  • 为了使用用不同苹果开发者账号签名的同一个应用,你需要使用$(AppIdentifierPrefix)com.microsoft.adalcache
  • 珍妮,感谢 cmets。看起来这是 App Center 在使用 ad-hoc 配置时更改权利的问题(即要求 App Center 自动管理设备 ID)。目前我们被阻止并诉诸于删除 MSAL 库,除非我们能找到解决方法或修复。

标签: ios azure-active-directory keychain adal msal


【解决方案1】:

MSAL 2.7.0 开始,MSAL 现在在运行时解析 TeamId。应使用新属性 iOSKeychainSecurityGroup 而不是 KeychainSecurityGroup。更多信息可以找到here。 AppCenter 中还有一个错误,他们在重新签署应用程序时在权利中使用通配符。从 1 月 21 日起,此问题已得到修复。

【讨论】: