This question already has answers here:
Add HTTP Header to NSURLRequest
                                
                                    (3个答案)
                                
                        
                                6年前关闭。
            
                    
我是使用HTTP的新手,因为我过去一直只是前端开发人员,但是根据我目前的合同,系统要求我使用REST API从服务器提取数据。我需要使用API​​密钥和API用户名在HTTP标头中对自己进行身份验证,并要求我根据API文档在“令牌”标头中进行身份验证。

在格式化NSURLRequest以完成此任务方面,我可以获得任何帮助吗?我在这里完全迷路了。

这是我要参考的API文档的特定部分:


  REST-APIUser-令牌
  
  与API相关的APIKey和APIUserName
  帐户必须以Base64String格式设置为“ REST-APIUser--Token”
  在令牌头中,如下所示:
  Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format(“ {0}:{1}”,APIKey,APIUserName)))
  
  哪里,
  
  APIKey –与API帐户关联的唯一密钥
  
  APIUserName –与API帐户关联的UserName
  
  APP用户ID
  
  必须将当前登录用户的ID设置为“ APP-User-ID”
  标头中的Base64String格式。
  Convert.ToBase64String(Encoding.UTF8.GetBytes(AppUserID))
  
  哪里,
  
  AppUserID –与API应用程序用户关联的用户ID


我拥有一个{APIKey},{APIUserName}和一个{AppUserID}。

最佳答案

Add HTTP Header to NSURLRequest

/* Create request variable containing our immutable request
 * This could also be a paramter of your method */
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]];

// Create a mutable copy of the immutable request and add more headers
NSMutableURLRequest *mutableRequest = [request mutableCopy];
[mutableRequest addValue:@"__usersKey__" forHTTPHeaderField:@"token"];

// Now set our request variable with an (immutable) copy of the altered request
request = [mutableRequest copy];

// Log the output to make sure our new headers are there
NSLog(@"%@", request.allHTTPHeaderFields);


请注意,如果您的意思是HTTPS,则连接是需要身份验证的连接,而不是请求。尽管您似乎不使用HTTPS。

NSString * AppUserId = Convert.ToBase64String(Encoding.UTF8.GetBytes(AppUserID))//或者无论您需要什么功能,它看起来都不像Objective-C。

查看How to Base64 encoding on the iPhone或类似的base64。这篇文章建议https://github.com/nicklockwood/Base64/

如果使用该库,则需要类似函数的内容

- (NSString *)base64EncodedString;


并将其传递给您的API文档中所描述的信息。由于我们没有您的全部信息,因此我们不能为您提供更多帮助。

例如,您可能想要:

 NSString *token = [NSString stringWithFormat@"%@:%@",APIKey,APIUserName]
 NSString *token64 = [token base64EncodedString]; //Assuming that's how you call the library's function. I have never used it so I don't know if it modifies NSString or what. You can always write a function for this part.

[mutableRequest addValue:@"APIUser--Token" forHTTPHeaderField:token64]; //Not sure what the API says the value should be, formatting isn't clear

//Follow the same lines for NSString *AppUserId
[mutableRequest addValue:@"APP-User-ID" forHTTPHeaderField:AppUserId];


只需按照那里的API来以相同的方式做令牌(以相同的方式生成令牌)。

关于ios - 如何配置HTTP header 进行身份验证? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20531658/

10-10 17:28