Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我可以在SFSafariViewController中从Safari获取Cookie吗?_Ios_Cookies_Safari_Openid Connect_Sfsafariviewcontroller - Fatal编程技术网

Ios 我可以在SFSafariViewController中从Safari获取Cookie吗?

Ios 我可以在SFSafariViewController中从Safari获取Cookie吗?,ios,cookies,safari,openid-connect,sfsafariviewcontroller,Ios,Cookies,Safari,Openid Connect,Sfsafariviewcontroller,tl;博士见下面的问题 在我的应用程序中,我有一个使用SFSafariViewController和遵循OAuth 2.0流的ASWebAuthenticationSession(使用AppAuth库)的登录名 登录正常,Cookie按预期与Safari共享。由于cookie共享,用户在使用Safari应用程序时会自动登录 然而,回到应用程序中,如果我再次启动SFSafariViewController,cookies就会丢失。这让我感到惊讶,因为我认为SFSafariViewControlle

tl;博士见下面的问题

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

登录正常,Cookie按预期与Safari共享。由于cookie共享,用户在使用Safari应用程序时会自动登录

然而,回到应用程序中,如果我再次启动SFSafariViewController,cookies就会丢失。这让我感到惊讶,因为我认为SFSafariViewController和Safari的cookie存储是相同的,并且在登录时它显然是朝着从SFSafariVC到Safari应用程序的方向工作的。 它的目的是不反过来工作——从Safari到SFSafariViewController,还是一个bug?

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

我还发现了一些相关的雷达,比如and或这个stackoverflow帖子:但它们并没有回答我的问题

根据这项研究,如果cookies有一个到期日(设置为未来的日期),它就可以工作。我验证了cookies,它们都有一个未来的到期日


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

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

行业状况

上面提到的问题是,由于浏览器安全措施(如更改)的原因,第三方cookie(如身份提供商发布的cookie)通常会在默认情况下被删除,而Safari中默认情况下会启用这些更改:

COOKIE属性

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

移动优先设计

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

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

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

选项2

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

  • web服务器日志中未记录可用令牌
  • 该令牌只能一次性使用
典型的实现如下所示:

  • 移动UI调用/api/token/encrypt端点
  • API将令牌散列存储在数据库中,并返回一个加密值,该值的有效期很短
  • 令牌从移动应用程序发送到Web UI
  • Web UI调用/api/token/decrypt端点以获取真正的令牌
  • API的解密实现删除数据库条目

嗨@gary archer,感谢您的回复-非常感谢。你的博客帖子也很不错。考虑到我得到的所有信息,我得到的印象是,通过iOS12以上的设计是不可能的。据我所知,ASWebAuthenticationSession仅用于登录流,如果我已经登录,我以后就不能使用它。我唯一的选择是打开Safari(有效)或SFSafariViewController(由于缺少Cookie而不适合我的需要)。当然,我可以使用访问令牌向我的安全后端API发出请求,但是对于SFSafariVC,我需要cookies。那么你有2个应用程序吗?网络应用和移动应用?您正试图从移动应用程序调用安全的web视图?我有一个本机iOS应用程序和一个web应用程序。iOS应用程序必须使用web应用程序的部分功能。最好在SFSafariViewController内,以便让用户(视觉上)保持在iOS应用程序内。因此,是的,我尝试从移动应用程序调用一个安全的web视图。(当然,WKWebView是不可能的,因为它有自己的cookie存储)。稍后将更新我的原始答案-您在跨域cookie和移动/web集成方面有一些问题。答案将基于从移动应用程序向web UI发送令牌。感谢您更新的答案。SameSite=None已应用于所有Cookie。我已经在(另一个)项目中选择1与webapp共享accessToken。不幸的是,这一次,这不是一个选择。谢谢你全面的回答!在我看来,只有两种选择(您解释的一种),因为SFSafariWebView不共享cookies