随着客户端API的更新,HTTPBasicAuthication方法已被OAuth2 Bearer
授权头取代。
在旧版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
头。
通常情况下,我会通过如下方式添加头文件:
NSString *authorization = [NSString stringWithFormat:@"Bearer %@",self.account.token];
[urlRequest setValue:authorization forHTTPHeaderField:@"Authorization"];
但是这种解决方法的问题在于,API将大部分调用重定向到其他URL,这与安全有关。当NSURLRequest
被重定向后,授权头将从请求中删除,由于我无法将Bearer方法添加到NSURLCredentialStorage
中,在重定向后无法进行身份验证。
有什么好的解决方案吗?我只能想到捕获重定向并修改NSURLRequest
的方式,以便包括Bearer
头。但是如何实现呢?