如何在Xamarin中启用密钥链访问组.用于ios的Forms PCL项目



我正在使用xamarin PCL,AD B2C客户端流项目在iphone ios 12.上调试时,捕捉到的错误消息是:

ex={Microsoft.Identity.Client.MsalClientException:应用程序中未启用密钥链访问组Entitments.plist。因此,无法保存到iOS钥匙扣。钥匙链访问组'xxxxxxxxxx.com.microsoft.adalcache

注意:xxxxxxxxxx是我的苹果团队ID

VS 2017设置为自动配置

我已经启用了密钥链,并试图将令牌保存在缓存中

我启用了Keychain,并在Entitment.plist 中添加了类似com.companyname.YYYYYY的Keychain组

我在信息中添加了.plist是:

CFBundleIdentifier:
com.companyname.YYYYY
CFBundleName:
YYYYY

CFBundleURLName:
com.companyname.YYYYY
CFBundleURLSchemes:
msal[APPLICATION ID]

它不会在缓存中保存引发错误的令牌。

但当我这样改变的时候,它会起作用。。。。

Entitlement.plist中类似xxxxxxxxxx.com.microsoft.adalcache的密钥链组

info.plist中是:

CFBundleIdentifier:
xxxxxxxxxx.com.microsoft.adalcache

CFBundleURLName:
xxxxxxxxxx.com.microsoft.adalcache

但如果我在第二个xamarin项目中使用这个设置,它可能会在iphone 上重写第一个项目

请解释我做错了什么,或者有什么不同的方法可以做。

感谢

此答案适用于MSAL版本2.X+

发生这种情况是因为您尚未指定希望应用程序使用的密钥链组。所以它使用的是MSAL默认值,这可能不是您想要的。你需要完成这些步骤中的每一个,看起来你还没有完成最后一个:

  1. 设置应用程序捆绑包名称,例如com.yourdomain.yourapp
  2. 将您的应用程序捆绑包名称添加到authorities.plist中,作为密钥链组
  3. 在MSALPublicClientApplication实例上指定密钥链安全组

例如,对于MSAL 2.x,您可以执行以下操作:

var authClient = new PublicClientApplication(clientId, authority);
authClient.iOSKeychainSecurityGroup = "com.yourdomain.yourapp";

一旦您指定了密钥链组,它就不应该再尝试将密钥链存储为默认的adalcache组!

此处提供详细信息:https://github.com/AzureAD/microsoft dotnet/wiki/Xamarin iOS认证库说明#启用密钥链组

最新更新