gpt4 book ai didi

ios - OAuth 2 承载授权 header

转载 作者:技术小花猫 更新时间:2023-10-29 10:22:58 26 4
gpt4 key购买 nike

随着客户端 API 的更新,HTTPBasicAuthication 方法已替换为 OAuth2 Bearer 授权 header 。

使用旧 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 被重定向后,Authorization header 从请求中删除,并且由于我无法将 Bearer 方法添加到 NSURLCredentialStorage 之后,它无法再进行身份验证重定向。

什么是好的解决方案?我只能考虑捕获重定向并修改 NSURLRequest 所以它确实包含 Bearer header 。但是如何呢?

最佳答案

经过大量研究,我发现当调用被重定向时,我只需要替换 NSURLRequest

虽然没有我希望的那么好,但确实有效。

我使用了 AFNetworking 并添加了重定向 block ,然后检查 Authorization header 是否仍然设置,如果没有我创建一个新的 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;

}];

关于ios - OAuth 2 承载授权 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com