【问题标题】:NSMutableURLRequest setting authorization headerNSMutableURLRequest 设置授权头
【发布时间】:2016-04-26 18:12:38
【问题描述】:

在设置NSMutableURLRequest 的“授权”标头时,我的服务器对标头的响应不包括该标头:

[Host] => myhost.com
[Content-Type] => application/x-www-form-urlencoded
[Connection] => keep-alive
[Accept] => */*
[User-Agent] => MyApp/1 CFNetwork/758.3.15 Darwin/15.4.0
[Content-Length] => 327
[Accept-Language] => en-gb
[Accept-Encoding] => gzip, deflate

我阅读了文档建议不要在此处设置,那么我应该在客户端哪里设置授权标头?

Authorization 标头的目的是发送我的 Oauth 签名和其他 Oauth 相关信息

【问题讨论】:

    标签: ios nsurlsession nsurlrequest


    【解决方案1】:

    你有用户和密码 API

     // Create the request
     NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:0];
    
    // New Create the connection
    NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
    
    NSURLSession *session = [NSURLSession sharedSession];//sessionWithConfiguration:defaultConfigObject delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    
    NSURLCredential *creds = [NSURLCredential credentialWithUser:self.username password:self.password persistence:NSURLCredentialPersistenceForSession];
    
    NSString *authStr = [NSString stringWithFormat:@"%@:%@",self.username,self.password];// @"username:password";
    
    NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding];
    
    NSString *authValue = [NSString stringWithFormat: @"Basic %@",[authData base64EncodedStringWithOptions:0]];
    
    // Part Important
    [request setValue:authValue forHTTPHeaderField:@"Authorization"];
    
    // Or Token
     NSString *authValueToken = @"OAuth UElJRFER1A5zcGkyW16T0";
     [request setValue:authValueToken forHTTPHeaderField:@"AuthenticatedToken"];// Authenticated API
    
    
    NSString *postLength = [NSString stringWithFormat:@"327"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    
    NSString *postLength = [NSString stringWithFormat:@"application/x-www-form-urlencoded"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Type"];
    
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request     
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
               receivedData = [NSMutableData data];
               NSString* responseData = [[NSString alloc] initWithData:data encoding: NSUTF8StringEncoding];
               NSLog(@"%@",responseData);
               if (error) {
                       [self handleError: error];
               }
     }];
    
    [dataTask resume]; // <- important
    
    NSLog(@"Header Fields Request--->> %@",request.allHTTPHeaderFields);
    

    【讨论】:

    • 我需要发送一个授权标头来将 Oauth 数据发送到我的服务器
    • @AdamCarter 请更新您的问题以包括这是特定于 OAuth 的。
    【解决方案2】:

    文档建议不要设置它,因为它通常是错误的方法。对于大多数身份验证,您应该在身份验证完成处理程序中创建一个实际的 NSURLCredential 对象,并且您应该仅在初始尝试访问资源失败后才这样做。

    不幸的是,AFAIK,操作系统中不支持 OAuth,所以您唯一能做的就是指定开头的标头,并确保您不会意外为该主机名添加任何其他凭据(因为那时有如果您这样做,您的 Authorization 标头很有可能会被踩到)。

    【讨论】:

      猜你喜欢
      • 2017-01-25
      • 2021-11-21
      • 2013-01-15
      • 2015-12-02
      • 2014-07-11
      相关资源
      最近更新 更多