我正在使用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默认值,这可能不是您想要的。你需要完成这些步骤中的每一个,看起来你还没有完成最后一个:
- 设置应用程序捆绑包名称,例如
com.yourdomain.yourapp
- 将您的应用程序捆绑包名称添加到authorities.plist中,作为密钥链组
-
在MSAL
PublicClientApplication
实例上指定密钥链安全组
例如,对于MSAL 2.x,您可以执行以下操作:
var authClient = new PublicClientApplication(clientId, authority);
authClient.iOSKeychainSecurityGroup = "com.yourdomain.yourapp";
一旦您指定了密钥链组,它就不应该再尝试将密钥链存储为默认的adalcache组!
此处提供详细信息:https://github.com/AzureAD/microsoft dotnet/wiki/Xamarin iOS认证库说明#启用密钥链组