将 Xamarin.Forms 中的 Microsoft.Identity.Client 从 1.x 升级到 4.x 后,大多数功能的工作原理基本相同。但是,登录 iOS 会弹出一个窗口,显示:
“我的应用”想要使用“b2clogin.com”登录
这允许应用程序和网站共享有关您的信息。
如果用户点击“继续”也没关系,但这很难说是无缝的。
据说它与 iOS 12 有关,但这似乎不是我的触发因素。有一篇 Microsoft 文章 说这实际上是正常的,并指出:
但在 iOS 上,用户可能必须同意浏览器才能回调应用程序,这可能很烦人。
我发现可以设置 .WithUseEmbeddedWebView(true) ,这会隐藏 URL 并删除弹出窗口,这适用于 Facebook 登录,但 Google 登录很难。
存在通用链接而不是 URL 方案和关联域的潜在路径。
调查该路径,看来我只需要使用以下 JSON 设置 URL https://myapp.b2clogin.com/.well-known/apple-app-site-association:
{
"webcredentials": {
"apps": [
"MYTEAMID.com.mycompany.myapp"
]
}
}
不幸的是,我无法控制该 URL。
还有其他想法吗?
简短的回答是——今天无法完成,因为此警报弹出窗口内置于 iOS 框架中。任何身份验证提供程序、库等如果在 iOS 中使用 ASWebAuthentication API,都会触发此警报
您可以选择使用不同的嵌入式浏览器弹出 API,这些 API 不会导致此警报,但它们将具有沙盒 cookie,并且用户可能无法体验 SSO。有一个 MSAL 文档页面更详细地讨论了这一点:
https://learn.microsoft.com/en-us/azure/active-directory/develop/customize-webviews
最佳的用户体验:
我仅使用 ROPC 进行登录(本机用户名/密码字段或可以使用生物识别)。
所以我在简单登录时没有任何弹出窗口。
其余的我使用公共流程(重置密码、Google 提供商等..)
打开 WebView 时不幸会弹出警告。
我对 Flutter 和 app_auth 包也有同样的问题。对我来说,删除 iOS 弹出消息的修复方法是使用下面解释的preferEphemeralSession 设置:
来自:https://pub.dev/packages/flutter_appauth 临时会话(仅限 iOS 和 macOS) 在 iOS(版本 13 及更高版本)和 macOS 上,您可以使用选项 PreferredEphemeralSession = true 启动临时浏览器会话以登录和注销。
对于临时会话,不会出现类似“app_name”想要使用“domain_name”登录 iOS 的警告。
选项preferEphemeralSession = true必须仅用于结束会话调用(如果它也用于登录调用)。否则,浏览器中仍然存在活动的登录会话。