使用Okta身份验证API进行Cookie管理

时间:2017-12-06 17:32:42

标签: ios objective-c okta-api

在我的应用程序中,我调用了身份验证api,下面是相同的代码

NSMutableDictionary* paraDict = [[NSMutableDictionary alloc] init];
[paraDict setObject:@"userid" forKey:@"username"];
[paraDict setObject:@"password" forKey:@"password"];

NSError *error;    
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSURL *url = [NSURL URLWithString:@"https://my.oktapreview.com/api/v1/authn"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.0];

[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPMethod:@"POST"];
NSData *postData = [NSJSONSerialization dataWithJSONObject:paraDict options:0 error:&error];
[request setHTTPBody:postData];

[request setHTTPShouldHandleCookies:YES];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    if ([(NSHTTPURLResponse*)response statusCode] == 200) {
        aBlock(YES);
    }
}];

[postDataTask resume];

在此之后我得到了成功回复,但无法获得与之相关的所有Cookie(当使用相同的请求与PostMan核对时,已收到大约12个带回复的Cookie)

为了阅读cookie,我正在使用

for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies])
{
    NSLog(@"name: '%@'\n",   [cookie name]);
    NSLog(@"value: '%@'\n",  [cookie value]);
    NSLog(@"domain: '%@'\n", [cookie domain]);
    NSLog(@"path: '%@'\n",   [cookie path]);
}

是否可以设置Cookie接受政策。

1 个答案:

答案 0 :(得分:0)

也许您可以使用NSHTTPCookie -cookiesWithResponseHeaderFields:forURL: method从您的数据任务收到的​​响应中提取回复的Cookie。

喜欢这样

task = [session dataTaskWithRequest:... completionHandler:^(...) {
    NSArray<NSHTTPCookie *> *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[(NSHTTPURLResponse *)response allHeaderFields] forURL:request.URL];
    // Use cookies
}];