我正在尝试使用我的iOS应用程序实现几种不同的身份验证机制。 关键是iOS应用程序是通过App Store分发的,并且它连接到的服务器是开源的。 为此,客户应设置自己的服务器。 这很像RocketChat应用程序的工作方式。 设置服务器时,用户可以定义他们想要使用的身份验证提供程序。 所有身份验证数据、客户端 ID、机密等都存储在服务器端。 服务器应用程序使用 passportjs 来支持各种不同的身份验证策略。 这意味着像 oauth 这样的事情是通过服务器完成的,oauth 回调会命中服务器 url。 从那里,服务器可以在身份验证后创建/映射用户到本地帐户,其中授权/访问在应用程序中进行控制。
例如,当执行oauth时,url将是这样的:
https://customserver.com/authentication/google
从那里,passportjs将重定向到谷歌进行身份验证。
关于这个问题,我需要在iOS中启动一些东西来启动该身份验证。 在这种情况下,似乎正确的使用方法是ASWebAuthenticationSession。 但是,在使用 ASWebAuthenticationSession 时,会出现一个警告对话框,指出初始"customserver.com":
[应用程序] 想要使用"customserver.com"登录 这允许应用程序和 分享有关您的信息的网站
虽然这是真的,但服务器(使用 passportjs(将重定向到身份验证提供程序站点。 在这种情况下,让我们以谷歌oauth为例。 这意味着这个模式警告非常令人困惑,它指出 customserver.com 是身份验证提供程序,而实际上 passportjs 正在重定向到谷歌(或其他一些(身份验证提供程序。
尽管 ASWebAuthenticationSession 使此流程变得非常容易,但它没有并且可能无法监控到 google 的初始重定向这一事实使用户感到困惑。 有了这个,我还研究了使用 SFSafariViewController 并在应用程序中创建一个深层链接以匹配重定向方案。 虽然不像 ASWebAuthenticationSession 那样干净,但这确实有效,因为没有模式对话框警告用户。 我甚至可以创建自己的自定义模式对话框,如果需要,该对话框会警告用户正确的身份验证站点。
这让我想到了几个问题。
在使用 ASWebAuthenticationSession 时,是否有任何解决方法或自定义呈现给用户的消息?
假设 #1 的答案是否定的,使用 SFSafariViewController 是否是解决消息的可接受解决方案?
-
从 iOS 15 开始,您对该模态的唯一配置可能性是使用 CFBundleName 来控制您指定为[APP]的文本部分。
-
是的,这是一种可接受的解决方法,会增加维护费用,并增加解决方案的复杂性。
在安全方面,只要您使用SFViewController,它就是等效的。模态不会带来任何额外的保证,因为您可以轻松将模态通行证作为系统批准的模态通行证。
作为旁白,PKCE是移动应用程序oauth2流的必备条件。