我计划将应用程序从使用 SFSafariViewController
的旧 OAuth 流程切换到使用 iOS 11 的 SFAuthenticationSession
的新流程。登录不是问题,转移到新 API 花了我几分钟时间来实现。但是注销让我感到困惑。
如何?
我在文档的任何地方都找不到任何提及要提供注销选项的内容。使用旧的 SFSafariViewController
使 cookie 无效?不,它们不再与 SFAuthenticationSession
共享。一旦我重新启动身份验证 session ,用户就会自动登录并且没有出路。那么如何启用注销呢?还是我只是忽略了一些非常明显的事情?
更新: 我找到了一种技术意义上的“有效方式”,但它对用户来说太疯狂了:在清除 cookie 的注销页面上打开一个新的 SFAuthenticationSession。但这意味着当注销时,警报 View 会再次询问用户是否愿意通过该服务登录。如果选择yes(“登录”),将打开 cookie 清除注销页面,用户必须手动关闭 View ,这可以被完成处理程序捕获,我们知道我们可以打开再次登录 View .. 显示登录提示以注销?我真的不喜欢这个解决方案。
有什么想法吗?我是否仍然忽略了一个完全显而易见的解决方案?
更新 2:由于到目前为止还没有人对此问题有任何线索,这可能不是一件容易的事。我已经通过他们的报告工具向 Apple 提出了一个建议,要么阐明如何处理这个问题,要么在不可用的情况下将其构建到 API 中。如果我得到答案,我会发布。
更新 3:在进一步思考这个问题后,我们找到了另一种可能的(尽管也没有吸引力)解决方案如果您可以影响 OAuth 提供程序的登录页面:使 cookie 的生命周期非常短。然后可以在不自动登录的情况下打开登录页面。然而,这会破坏在应用程序之间共享登录 session 的全部目的。您需要能够影响登录页面。
更新 4:由于 iOS 12 SFAuthenticationSession
已弃用并被 ASWebAuthenticationSession
取代。但是,ASWebAuthenticationSession
不会更改有关注销的任何内容。还是不行。和以前一样的问题。
最佳答案
对于 ASWebAuthenticationSession,在调用 .start() 之前将 .prefersEphemeralWebBrowserSession 设置为 true 将强制用户在浏览器 session 中输入凭据。虽然与注销不同,但这将允许新用户在启动下一个 session 时使用不同的凭据登录。
关于ios - SFAuthenticationSession/ASWebAuthenticationSession 和注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47207914/