繁体   English   中英

我可以在 SFSafariViewController 中从 Safari 获得 cookies 吗?

[英]Can I get cookies from Safari in a SFSafariViewController?

tl;博士; 看下面的问题

在我的应用程序中,我有一个使用 SFSafariViewController 和 ASWebAuthenticationSession 的登录,遵循 OAuth 2.0 流程(使用 AppAuth 库)。

登录工作和 cookies 按预期与 Safari 共享。 由于 cookie 共享,如果用户使用 Safari 应用程序,他们会自动登录。

但是,回到应用程序中,如果我再次启动 SFSafariViewController,cookies 会丢失。 这让我感到惊讶,因为我认为 SFSafariViewController 和 Safari 的 cookie Store 是相同的,并且在登录期间它显然在从 SFSafariVC 到 Safari 应用程序的方向上工作。 它是否打算不以相反的方式工作 - 从 Safari 到 SFSafariViewController,还是一个错误?

我在文档中没有找到明确的陈述。 当然,我没有将临时 session 设置为 true,但根据文档,它会与我想要实现的相反:

不使用临时 session 时,除 session Z55E7DD3016CE4AC57B2Z9A0 之外的所有 cookies 都可用于浏览器。

I've also found somehow related radars like http://www.openradar.me/33323462 and http://www.openradar.me/radar?id=5036182937272320 or this stackoverflow post: Why is SFSafariWebViewController not sharing cookies with Safari properly ? 但他们没有回答我的问题。

根据此评论,如果 cookies 有到期日期(设置为未来日期),它可能会起作用。 我验证了 cookies - 它们都有未来的到期日。

我的问题:我做错了什么,或者这是预期的行为,SFSafariViewController 没有从同一应用程序中的早期 SFSafariViewController 实例或 Safari 中获取 cookies?

要求

因此,您似乎想要一个解决方案来从移动应用程序调用安全的 web 内容,并避免额外的登录。 这是一个常见的要求,我将在下个月左右在我的博客中添加一些关于这个主题的内容。

行业的STATE

上述问题是第三方 cookies,例如由身份提供者发布的那些,由于诸如智能跟踪预防更改之类的浏览器安全举措,这些天经常默认丢弃 - 在 Safari 中默认情况下是打开的:

在此处输入图像描述

Cookie 属性

值得检查您的 cookies 是否使用 SameSite=None 发布,这将为您提供基于第三方 cookie 的解决方案的最佳选择。

移动优先设计

在 OAuth 世界中,为了满足要求,可能需要将令牌从移动 UI 发送到 web UI,这当然具有需要设计的先决条件:

  • Web UI 必须使用令牌
  • Web UI 必须根据主机使用不同的令牌处理策略

选项1

一种选择是使用移动 web 视图来显示 web 内容 - 请参阅下面的代码:

选项 2

另一种选择是在查询字符串参数中将代表令牌的内容从移动应用程序发送到 Web UI,在这种情况下,您需要确保:

  • web 服务器日志中没有记录可用的令牌
  • 令牌只能使用一次

典型的实现如下所示:

  • 移动 UI 调用 /api/token/encrypt 端点
  • API 在数据库中存储一个令牌 hash 并返回一个存活时间短的加密值
  • 令牌从移动应用程序发送到 Web UI
  • Web UI 调用 /api/token/decrypt 端点来获取真正的令牌
  • API 的解密实现删除数据库条目

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM