OAuth 2 承载授权标头

2024-04-11

随着客户端 API 的更新,HTTPBasicAuthication 方法已替换为 OAuth2Bearer授权标头。

使用旧的 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];

但这不适用于Bearer header.

现在通常我会自己添加标题,如下所示:

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

但这个解决方案的问题是 API 将大部分调用重定向到其他 URL,这与安全性有关。 之后NSURLRequest被重定向,授权标头已从请求中删除,因为我无法将 Bearer 方法添加到NSURLCredentialStorage重定向后无法再进行身份验证。

什么是好的解决方案?我只能想到捕捉重定向并修改NSURLRequest所以它确实包括Bearer标头。但如何呢?


经过大量研究后,我发现我只需要更换NSURLRequest当呼叫被重定向时。

没有我想要的那么好,但确实有效。

I used AFNetworking并添加重定向块,然后检查是否Authorization标题仍然设置,如果没有我创建一个新的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;

}];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OAuth 2 承载授权标头 的相关文章

随机推荐