我有一个应用程序,与使用HTTP摘要认证的服务器通信。
在iPhone中,“会话”管理对于我们开发人员来说似乎是黑盒子。我们无法看到框架如何处理/持久化http会话,这是否正确?
如果我在这里只是暗淡无光,请有人解释一下如何正确处理iPhone上的HTTP摘要认证?
我的基本步骤是:
- 向受保护的url发出请求
- 服务器发送401
- 客户端创建和持续凭据,并将其传递回服务器
- 服务器验证凭据,如果验证通过,则完成请求,如果未经验证,则发送另一个401。
- 对安全url进行后续请求
- 服务器再次请求授权........
它适用于单个请求,但是如果我进行其他后续请求,则服务器会再次请求授权。服务器已针对特定用户持久化了会话,但是由于某种原因,iPhone没有在同一会话中发出请求... 因此,服务器必须放弃身份验证对象并在每次客户端请求安全url时创建新对象。
我确定这不是正确的行为。
如果我们看一下浏览器在这种情况下的行为:
- 浏览器从安全url请求数据
- 服务器发送401
- 浏览器提示用户凭据,持久化它并将其传递给服务器
- 服务器验证凭据,如果验证通过,则返回数据,如果未经验证,则发送另一个401。
- 对安全url进行后续请求不需要提示凭据,因为浏览器管理会话。
我正在创建NSURLCredential并在NSURLCrendtialStorage中持久化它。然后当应用程序收到“didReceiveAuthenticationChallenge”时,我从存储中检索凭据并将其返回,如果不存在,则创建凭据(在第一个请求上)。
任何帮助都将不胜感激。 谢谢。