在Web请求中附加附加信息以进行身份​​验证

时间:2014-06-03 14:50:14

标签: ios oauth nsurlconnection nsurl

我正在为OAuth 2.0实现自己的身份验证框架。 就我的理解而言,如果令牌已过期,则服务器发送401。

我实施了NSURLConnection的委托

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

捕获这些错误并刷新令牌。

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{
// refresh token and send it to server

    if ([challenge previousFailureCount] > 0) {
            // do something may be alert message
        } 
    else
    {
         //refreshToken
    }
}

但似乎我无法将令牌附加到网址。

1 个答案:

答案 0 :(得分:1)

您无法 - 更改网址意味着新请求。当前请求正在进行中,并且是针对此URL的。

一种直截了当的方式是拥有一个'包装对象'在url连接本身周围,如果第一次失败,它可以透明地执行第二次请求

e.g。 PSEUDOCODE

@interface MyConnection
- loadRequest:(NSURLRequest*)r completionHandler:handler //not fully felshed out for this example
@end

@implementation MyConnection

- loadRequest:(NSURLRequest*)r completionHandler:handler //not fully felshed out for this example 
{
    [NSURLConnection sendRequest:r completion:{
        if(response.status == 401)
        {
            NSMutableURLRequest *r2 = [NSMutableURLRequest requestWithURL:r.URL + token];
            //refresh by sending a new request r2
                [NSURLConnection sendRequest:r2 completion:{
                    handler(response);
                }];
        }
        else {
            handler(response);
        }
    }];
}
@end