ios - SFAuthenticationSession/ASWebAuthenticationSession 和注销

标签 ios swift oauth sfauthenticationsession

我计划将应用程序从使用 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/

相关文章:

ios - 有没有办法在您输入时更改文本字段内文本的颜色?

ios - 有没有比手动 po 每个变量更好的方法来检查协议(protocol)中 swift 对象的属性?

android - 由于 Auth,应用程序和服务器紧密耦合

python - 如何使用http协议(protocol)实现社交账号认证

ios - UIView 层次结构中的顶级 View

ios - 奇怪的 NSManagedObject 行为

ios - didReceiveRemoteNotification :fetchCompletionHandler: but the completion handler was never called

ios - 如何在swift中动态创建单选按钮?

ios - iboutlet 和 ibaction 连接错误

oauth - 来自 Youtube API 的 OAUTH 凭证无效