如何在Xamarin.Forms PCL项目中为iOS启用钥匙串访问组

时间:2019-01-18 23:51:26

标签: xamarin azure-ad-b2c

我正在使用xamarin PCL,AD B2C Client flow project 在iPhone iOS 12上进行调试时,捕获到错误消息是:

  

ex = {Microsoft.Identity.Client.MsalClientException:应用程序   没有在中启用钥匙串访问组   Entitlements.plist。结果,无法保存到   iOS钥匙串。钥匙串访问组   'xxxxxxxxxx.com.microsoft.adalcache

注意:xxxxxxxxxx是我的Apple Team ID

VS 2017设置为自动配置

我已启用钥匙串,并尝试将令牌保存在缓存中

我启用了钥匙串,并在Entitlement.plist中添加了像com.companyname.YYYYY这样的钥匙串组

我在info.plist中添加的是:

CFBundleIdentifier:
com.companyname.YYYYY

CFBundleName:
YYYYY


CFBundleURLName:
  com.companyname.YYYYY

 CFBundleURLSchemes:
msal[APPLICATION ID]

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

但是当我这样改变时它就起作用了。...

xxxxxxxxxx.com.microsoft.adalcache中的Entitlement.plist这样的钥匙链组

info.plist中是:

CFBundleIdentifier:
xxxxxxxxxx.com.microsoft.adalcache


CFBundleURLName:
xxxxxxxxxx.com.microsoft.adalcache

但是如果我在第二个xamarin项目中使用此设置,它可能会覆盖iphone上的第一个项目

请向我解释我做错了什么,或者有其他不同的处理方法。

谢谢

1 个答案:

答案 0 :(得分:2)

此答案适用于MSAL 2.X +

版本

之所以发生这种情况,是因为您尚未指定希望应用程序使用的钥匙串组。因此它使用的是MSAL默认值,可能不是您想要的。您需要执行以下每个步骤,而您似乎尚未完成最后一个步骤:

  1. 设置应用程序捆绑包名称,例如com.yourdomain.yourapp
  2. 将您的应用程序捆绑包名称添加为entitlements.plist作为钥匙串组
  3. 在MSAL PublicClientApplication实例上指定钥匙串安全组

例如,对于MSAL 2.x,您可以这样做:

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

一旦指定了钥匙串组,它就不应再尝试作为默认的adalcache组存储到钥匙串中!

详细信息在这里: https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Xamarin-iOS-specifics#enable-keychain-groups