С обновлением 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
. Но как?