ios – OAuth 2承载授权头

前端之家收集整理的这篇文章主要介绍了ios – OAuth 2承载授权头前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
通过对客户端API的更新,HTTPBasicAuthication方法已被替换为OAuth2承载授权头.

使用旧API,我将执行以下操作:

NSURLCredential *credential = [NSURLCredential credentialWithUser:self.account.username 
                                                         password:self.account.token 
                                                      persistence:NSURLCredentialPersistenceForSession];

NSURLProtectionSpace *space = [[NSURLProtectionSpace alloc] initWithHost:kAPIHost
                                                                    port:443
                                                                protocol:NSURLProtectionSpaceHTTPS
                                                                   realm:@"my-api"
                                                    authenticationMethod:NSURLAuthenticationMethodHTTPBasic];

但这不会与承载头部一起使用.

现在通常我只是添加标题我的自己添加如下:

NSString *authorization = [NSString stringWithFormat:@"Bearer %@",self.account.token];
[urlRequest setValue:authorization forHTTPHeaderField:@"Authorization"];

但这个解决方案的问题是API将大部分调用重定向到其他URL,这与安全性有关.
NSURLRequest被重定向后,授权头将从请求中删除,并且由于我无法将承载方法添加到NSURLCredentialStorage,所以在重定向后不能再进行身份验证.

什么是好的解决方案?我只能想到抓住重定向修改NSURLRequest,所以它包括承载头.但是怎么样

解决方法

经过很多研究,我发现我只需在重定向呼叫时更换NSURLRequest.

不如我想要的那样好,但是做得很好.

我使用AFNetworking并添加重定向块,然后检查如果不是我创建一个新的NSMutableURLRequest并且设置所有的属性以匹配旧的请求,授权头仍然设置(我知道我可以刚刚创建一个可变的副本):

[requestOperation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection,NSURLRequest *request,NSURLResponse *redirectResponse) {

        if ([request.allHTTPHeaderFields objectForKey:@"Authorization"] != nil) {
            return request;
        }

        NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] initWithURL:request.URL cachePolicy:request.cachePolicy timeoutInterval:request.timeoutInterval];
        NSString *authValue = [NSString stringWithFormat:@"Bearer %@",self.account.token];
        [urlRequest setValue:authValue forHTTPHeaderField:@"Authorization"];

        return  urlRequest;

    }];
原文链接:https://www.f2er.com/iOS/336119.html

猜你在找的iOS相关文章