首页 > 解决方案 > 该应用程序没有启用钥匙串访问组

问题描述

我们有一个 Xamarin.Forms 应用程序,并尝试使用 MSAL 身份验证,并面临 iOS 项目的问题。它可以在模拟器中运行,但是当由 Azure 管道构建并安装在真正的 iPhone 上时,会发生异常:

MSAL.Xamarin.iOS.4.14.0.MsalClient 异常:错误代码:missing_entitlements Microsoft.Identity.Client.MsalClientException:应用程序未在 Entitlements.plist 中启用钥匙串访问组。结果,无法保存到 iOS 钥匙串。Entitlements.plist 中未启用钥匙串访问组“OURID.com.microsoft.adalcache”...

OURID 当然是真正价值的替代品。

这是我们在 entitlements.plist 中的内容:

 <key>keychain-access-groups</key>
  <array>
     <string>$(AppIdentifierPrefix)com.microsoft.adalcache</string>
  </array>

在 B2CAuthenticationService 构造函数中:

            var builder = PublicClientApplicationBuilder.Create(B2CConstants.ClientID)
            .WithB2CAuthority(B2CConstants.AuthoritySignInSignUp)
            .WithIosKeychainSecurityGroup(B2CConstants.IOSKeyChainGroup)
            .WithRedirectUri($"msal{B2CConstants.ClientID}://auth");

我会错过什么导致异常?

添加:如果我向管道添加变量替换任务,即使那样,也只能替换 xml 和 json 配置文件中的值;不是 plist 文件。

标签: iosxamarin.formsxamarin.iosmsal

解决方案


我通过在文本编辑器中编辑项目并在

    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>

物业组内

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">

当我之前通过项目 GUI 执行此操作时,它仅影响属性组

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">

这就是为什么它在模拟器中对我有用,但在真实设备上却不行。


推荐阅读