我有一个与使用 HTTP Digest 身份验证的服务器通信的应用程序。
在我看来,iPhone 中的“会话”管理对我们开发人员来说是相当“黑匣子”。我们真的看不到框架如何处理/持久化 http 会话吗?
如果我只是在这里昏暗,有人愿意解释如何在 iPhone 上处理 HTTP Digest 身份验证吗?
我的基本经历是:
- 向安全 URL 发出请求
- 服务器发送 401
- 客户端创建并保存一个凭证,并将其传递回服务器
- 服务器验证凭证,如果验证则完成请求,如果没有则发送另一个 401。
- 发出后续请求以保护 url
- 服务器再次请求授权......
这适用于单个请求,但如果我提出额外的后续请求,服务器会再次请求授权。服务器为特定用户保留了一个会话,但由于某种原因 iPhone 没有在同一个会话中发出请求......因此,服务器必须丢弃身份验证对象并在每次客户端时创建一个新对象向安全 URL 发出请求。
我确定这不是正确的行为。
如果我们看看浏览器在这种情况下的行为:
- 浏览器从安全 url 请求数据
- 服务器发送 401
- 浏览器提示用户输入凭据,将其持久化,将其传递给服务器
- 服务器验证凭据,如果验证则返回数据,否则发送另一个 401。
- 由于浏览器管理会话,因此不会提示对安全 url 发出的后续请求提供凭据。
我正在创建 NSURLCredential 并将其保存在 NSURLCrendtialStorage 中。然后,当应用程序收到“didReceiveAuthenticationChallenge”时,我从存储中检索凭证并将其传回,如果凭证不存在(在第一个请求中)则创建凭证。
任何帮助将不胜感激。谢谢。