Webview中的身份验证会话

时间:2014-02-12 19:20:00

标签: macos cocoa authentication cookies webview

我正在开发一个OS X应用程序,用户可以在其中连接到不同外部服务(在OAuth中)的帐户。 为此,我需要在Webview中打开我的API页面(一个Rails应用程序),它将用户重定向到要连接的服务。在流程结束时,用户将再次在我的API上重定向,这将告诉他连接是否正常工作。

因此,用户需要在外部服务网站上的OAuth流程之前和之后对我的API进行身份验证。 当我打开Webview时,由于访问令牌作为URL的参数,用户被验证,并且重定向到外部服务工作正常。 但很多时候,当用户在连接后被重定向到我的API时,他不再被认证(但有时它可以工作)。

当我通过

检查我的应用的现有Cookie时
[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:]

我的API有一个会话cookie:

<NSHTTPCookie version:0 name:"_..._api_session" value:... expiresDate:(null) created:2014-02-12 19:16:00 +0000 (4.13925e+08) sessionOnly:TRUE domain:... path:"/" isSecure:FALSE>

仅仅保持用户身份验证似乎不够。

这可以来自哪里? 它似乎与Webview有关,因为当我通过将用户发送到外部浏览器来完成整个过程时,它可以正常工作。 Webview是否有特定的方式来处理会话cookie?

我不知道我是否足够具体,请询问您是否需要其他详细信息。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题所在。

我的应用通过永久同步流程与我的API通信,需要使用access_token进行身份验证。我使用AFNetworking,在应用容器中创建会话cookie。

当我在Webview中再次进行身份验证时,它还会创建一个cookie会话。不知何故,cookie发生了冲突并破坏了会话。

我刚刚告诉AFNetworking不要使用cookie来避免这种情况,并且它有效。