该应用程序未启用钥匙串访问组

Dav*_*het 4 xamarin.ios ios xamarin.forms azure-ad-msal

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

MSAL.Xamarin.iOS.4.14.0.MsalClient 异常:ErrorCode: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>
Run Code Online (Sandbox Code Playgroud)

在 B2CAuthenticationService 构造函数中:

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

我可能缺少什么导致异常?

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

Dav*_*het 5

我通过在文本编辑器中编辑项目并在中指定 entitlements.plist 解决了该问题

    <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
Run Code Online (Sandbox Code Playgroud)

物业组内

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
Run Code Online (Sandbox Code Playgroud)

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

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
Run Code Online (Sandbox Code Playgroud)

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