我正在为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
}
}
但似乎我无法将令牌附加到网址。
答案 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