IOS - 在HTTP标头中处理令牌认证

时间:2014-11-09 17:09:30

标签: ios objective-c authentication http-headers

我的组织使用了许多不同的身份验证方法。我一直在努力的一个是我们的应用程序使用Oath2,期望Authorization标头将令牌信息存储在HTTP标头中。我可以手动为每个请求添加Authorization标头信息,但我希望自动填充此信息,而不是为每个NSURLSession,NSURLConnection,UIWebView或[UIImage:imageFromUrl]手动添加它。在NSURLConnection类和NSURLSession的Apples文档中,它表示它将处理旨在为您处理HTTP协议的各个方面,包括Authentication头,他们建议不要更改此属性,但它似乎没有设置为了我。至少我希望对于NSURLSession对象,我只需要通过访问sharedSession并通过setHTTPAdditionalHeaders调用添加头信息来设置一次,但是下次访问sharedSession时它似乎没有保存信息

我在这里缺少一些东西,或者我是否需要在所有呼叫上手动填充HTTP标头?

修改
下面是一段代码片段,展示了我如何尝试为会话设置标头。

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id jSONObj = [defaults objectForKey: kTokenInformation];
[config setHTTPAdditionalHeaders:@{@"Authorization": [NSString stringWithFormat:@"Bearer %@",[jSONObj valueForKeyPath:@"access_token"]]}];
session = [NSURLSession sessionWithConfiguration:config];

但是,下次调用[NSURLSession sharedSession]时,并不会出现令牌。所以现在每次调用共享会话时我都必须这样做。我还不确定文档如何处理维护多个会话的应用程序,每个会话可能需要单独的Auth令牌。我想念的任何想法听到了。

1 个答案:

答案 0 :(得分:4)

看看NSURLSessionConfiguration

例如,您可以设置一个提供NSURLSession

的单例类
// Session setup
NSString *tokenString = ...;
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
[sessionConfiguration setHTTPAdditionalHeaders:@{ @"X-Auth-Token" : tokenString" }];
self.session = [NSURLSession sessionWithConfiguration:sessionConfiguration];

现在,每次您需要提出请求时都会使用您的会话:

// Send Request
NSURLSession *session = [[SessionManager sharedManager] session];
[[session dataTaskWithURL:url
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}] resume];

这是一个很棒的教程:http://code.tutsplus.com/tutorials/networking-with-nsurlsession-part-1--mobile-21394