1

问题摘要:我正在MKNetworkKit使用 Basic Auth 对 REST 服务器进行身份验证。我不是服务器端详细设置的专家。我所知道的是,它需要一个没有 SSL 的基本身份验证。

如果我使用有效的用户/密码对自己进行身份验证,并且如果我第二次使用一些虚假输入进行身份验证,它仍然会成功。我阅读了文档并尝试这样做:

[op setCredentialPersistence:NSURLCredentialPersistenceNone];

它不起作用。但如果我这样做:

[op setCredentialPersistence:NSURLCredentialPersistenceNone];
[op addHeader:@"Cookie" withValue:@""];   // a hunch I tried

然后它似乎起作用了。就好像某些 cookie 总是被传递,并且服务器甚至不检查授权标头就接受它。我已经做了一些测试,我将按照这个顺序(好,假,好)和(假,好,假)提供东西,它似乎按预期工作。

现在,有人可以指出,如果事情不应该这样工作,那么一定是某个地方存在错误,要么是服务器端,要么MKNetworkKit是服务器端?如果我设置NSURLCredentialPersistenceNone了,那么为什么添加该 Cookie 标头会使其工作?它一定已经覆盖了它本来要发送的东西并导致了错误的行为,因此“修复”了它。

4

1 回答 1

0

由于 HTTP 协议的无状态特性,客户端经常使用 cookie 跨 URL 请求提供数据的持久存储。URL 加载系统提供接口来创建和管理 cookie,将 cookie 作为 HTTP 请求的一部分发送,以及在解释 Web 服务器的响应时接收 cookie。OS X 和 iOS 提供了 NSHTTPCookieStorage 类,该类又提供了管理 NSHTTPCookie 对象集合的接口。在 OS X 中,cookie 存储在所有应用程序之间共享;在 iOS 中,cookie 存储是每个应用程序的。(检查https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html#//apple_ref/doc/uid/10000165-BCICJDHA) 正如 Moxy 所说,尝试记录 [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookie]。我遇到了同样的问题,原因是服务器使用和维护了 cookie。因为每当我使用凭据登录时都会发生重定向,所以我检查了请求和回应

  • (NSURLRequest )连接:(NSURLConnection)inConnection willSendRequest:(NSURLRequest*)inRequest redirectResponse:(NSURLResponse*)inRedirectResponse

并且 cookie 保存在标头中。您唯一能做的就是为新会话发送一个随机 cookie

于 2014-02-07T07:38:45.257 回答