我们有一个原生应用程序,我们正在原型化它需要:
- 通过OIDC(OAUTH2)验证用户以公共客户端身份获取访问令牌
- 从我们的网站渲染应用内的Web内容,该网站受与从上面获取的访问令牌相同的IdP(Keycloak)保护。
我们使用的是AppAuth库,它遵循RFC 8252的最佳实践,使用外部用户代理,使本机应用程序无法窥探用户凭据。作为iOS 13+,它使用ASWebAuthenticationSession。这部分对我们来说很完美。
我们有问题时,然后试图通过SFSafariViewController访问我们的受保护的网站。IdP从ASWebAuthenticationSession设置的Cookie不可见。无论cookie是会话cookie还是持久cookie,情况都是如此。因此,用户必须再次进行身份验证。
我对各种类型的cookie共享状态(持久与会话)与各种版本的iOS和各种方法(ASWebAuthenticationSession,SFSafariViewController+WKWebView)感到非常困惑。我似乎找不到确定的矩阵。
从花时间研究,感觉就像与目前的cookie限制在iOS上(安全+隐私[好事!我不能完成我想要的。这感觉就像是一件很平常的事情,我希望我做错了什么。
因此,以下是几个问题:
1.是否可以在同一应用程序中允许在ASWebAuthenticationSession和SFSafariViewController之间共享持久和/或会话Cookie?
1.如果没有,是否有其他方法/模式?
谢谢你,谢谢
1条答案
按热度按时间8yoxcaq71#
截至iOS 16,我不知道如何在
ASWebAuthenticationSession
和SFSafariViewController
之间共享cookie。我为自己的SSO实现提供的解决方案是使用
SFSafariViewController
进行初始登录和随后的应用浏览。我遇到的这种方法的唯一主要缺点是,
SFSafariController
持久化的cookie仅可用于SFSafariController
,这意味着如果用户打开Safari应用程序,他们将需要重新验证(而不是ASWebAuthenticationSession
,它确实与Safari应用程序共享cookie)。我真的希望苹果能够改进他们关于SSO的文档和实现。