willSendRequestForAuthenticationChallenge的目的

时间:2013-11-11 19:27:37

标签: ios networking nsurlconnection nsurlsession

我正在看Box Oauth2.0 View Controller: https://github.com/box/box-ios-sdk-v2/blob/master/BoxSDK/OAuth2/BoxAuthorizationViewController.m

他们有以下代码:

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{

包含此类代码的目的是什么?

在webview中显示oauth2.0流程时是否需要?

1 个答案:

答案 0 :(得分:1)

简单地说,这个委托方法反映了HTTP 1.1中指定的“访问身份验证”方案,尤其是RFC 2617

当未经身份验证的客户端发送请求时,服务器通过向客户端发送401(未授权)响应消息以及响应中的WWW-Authenticate标头来“挑战”客户端。然后,客户端可以通过提供合适的凭据并重复请求来回答WWW-Authenticate标头中指定的特定“挑战”。

客户究竟需要做什么取决于挑战的类型和授权方案以及客户要求。 URL加载方案已经实现了一个默认行为,这在很多情况下是足够的,但是当默认行为不合适时,您可以实现此委托并根据您的特定需求进行定制。

IMO,OAuth客户端库应该实现此委托。当客户端身份验证失败时,服务器可能在其响应中发送HTTP 401(未授权)状态代码,包括WWW-Authenticate标头字段,指示支持哪些身份验证方案。 (参见§5.2。错误回复 RFC 6749)。

正确实现此委托方法实际上是一个高级主题,尤其是因为这会影响安全性。因此,我强烈建议您在意外禁用HTTPs服务器信任评估之前阅读更多材料。 ;)