我正在尝试使用我的 iOS 应用程序实现一些不同的身份验证机制。关键是 iOS 应用程序是通过 App Store 分发的,并且它连接的服务器是开源的。为此,客户应设置自己的服务器。这很像 RocketChat 应用程序的工作方式。在设置服务器时,用户可以定义他们想要使用的身份验证提供程序。所有的身份验证数据、客户端 ID、机密等都存储在服务器端。服务器应用程序使用 passportjs 来支持各种不同的身份验证策略。这意味着像 oauth 之类的事情是通过服务器完成的,并且 oauth 回调会访问服务器 url。从那里,服务器可以在身份验证后创建/映射用户到本地帐户,在应用程序中控制授权/访问。
例如,当执行 oauth 时,url 将类似于:
https://customserver.com/authentication/google
从那里,passportjs 将重定向到谷歌进行身份验证。
关于这个问题,我需要在 iOS 中启动一些东西来启动身份验证。似乎在这种情况下使用正确的是ASWebAuthenticationSession。但是,当使用 ASWebAuthenticationSession 时,会出现一个警告对话框,指出初始的“customserver.com”:
[App] 想要使用“customserver.com”登录 这允许应用程序和网站共享有关您的信息
虽然这是真的,但服务器(使用 passportjs)将重定向到身份验证提供程序站点。在这种情况下,让我们以 google oauth 为例。这意味着这种模式警告非常令人困惑,它指出 customserver.com 是身份验证提供者,而实际上 passportjs 正在重定向到谷歌(或其他一些)身份验证提供者。
尽管 ASWebAuthenticationSession 使这个流程变得非常简单,但它没有而且可能无法监控到 google 的初始重定向这一事实让用户感到困惑。有了这个,我还研究了使用 SFSafariViewController 并在应用程序中创建一个深层链接以匹配重定向方案。虽然不如 ASWebAuthenticationSession 干净,但它确实有效,因为没有模式对话框警告用户。我什至可以创建自己的自定义模式对话框,如果我愿意,它会警告用户正确的身份验证站点。
这导致我提出几个问题。
在使用 ASWebAuthenticationSession 时,是否有办法绕过或自定义呈现给用户的消息?
假设#1 的答案是否定的,使用 SFSafariViewController 是解决该消息的可接受解决方案吗?