我正在使用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上的第一个项目
请向我解释我做错了什么,或者有其他不同的处理方法。
谢谢
答案 0 :(得分:2)
此答案适用于MSAL 2.X +
版本之所以发生这种情况,是因为您尚未指定希望应用程序使用的钥匙串组。因此它使用的是MSAL默认值,可能不是您想要的。您需要执行以下每个步骤,而您似乎尚未完成最后一个步骤:
com.yourdomain.yourapp
PublicClientApplication
实例上指定钥匙串安全组 例如,对于MSAL 2.x,您可以这样做:
var authClient = new PublicClientApplication(clientId, authority);
authClient.iOSKeychainSecurityGroup = "com.yourdomain.yourapp";
一旦指定了钥匙串组,它就不应再尝试作为默认的adalcache组存储到钥匙串中!