SFAuthenticationSession 不在真实设备上共享 cookie

Nik*_*mov 6 single-sign-on ios11

我将AppAuth-iOS用于 SSO。在 ios 11 模拟器上一切正常,而 SSO(cookies 共享)在运行 11.0.0、11.0.1、11.0.2 的真实设备上不起作用。那么 SFAuthenticationSession 是否已损坏,是否有任何已知的解决方法?

小智 5

我也面临同样的问题,根据我的测试和研究,是的,它坏了。SFAuthenticationSessions 会记住单个应用程序运行时的 cookie,但不会在应用程序重新启动后或在多个应用程序之间 (= SSO) 记住。我对 iOS 11.1 beta 1 和 Xcode 9.1 beta 1 进行了一系列测试,结果如下:

  1. 使用 SFAuthenticationSession 进行初始登录,并在同一应用程序运行期间,使用另一个 SFAuthenticationSession 检查登录是否仍然有效(基于 cookie)。这工作正常。
  2. 重新启动应用程序,然后尝试检查会话状态将不起作用,表明 cookie 未持久化。
  3. 使用系统 Safari(使用 UIApplication.shared.openURL)进行登录,然后使用 SFAuthenticationSession 检查登录状态。这也行不通。Cookie 不在 Safari 和 SFAuthenticationSession 之间共享。
  4. 使用系统 Safari 登录和会话检查都可以工作,即使在多个应用程序运行之间也是如此。正如预期的那样,Safari 仍然记得自己的 cookie。但它们不是共享的。

我对 SFAuthenticationSession 的另一个抱怨是它使用项目目标名称而不是其弹出对话框的应用程序名称。

我能找到的唯一正在进行的讨论是在这篇 Twitter 帖子中:https : //twitter.com/rmondello/status/887434621989789696。我也提交了错误报告,但自 9 月 5 日以来没有更新。

  • 我们一直在对您的示例应用程序进行一些测试,因为我们面临着非常相似的问题。如果 SFAuthenticationSession 是仅会话 cookie,则 SFAuthenticationSession 似乎无法访问 Safari 中设置的 cookie。如果您使用“max-age”和“expires”参数创建 cookie,它会在应用程序重新启动后持续存在,并在 Safari 和 SFAuthenticationSession 之间共享。这是在 iOS 11.1.2 下。不确定这是否会解决您的问题,但它可能会提供一些见解。 (4认同)