2013-11-21 24 views
4

我在使用HTTP令牌验证与NSMutableURLRequest时遇到了一些问题。我已经做了一些研究并使用了以下问题:ios managing authentication tokens from NSURLRequest/HTTP request了解如何在HTTP标头中设置令牌。然而,我需要设置的令牌不仅仅是一个带有值的简单标题字段。我需要设置一个http头域(或多个),如下所示:Authorization: Token token="tokenHere", nonce="def"。在下面的代码片段是失败的事情,我已经试过的例子:IOS - 使用NSURLRequest的HTTP标头中的令牌验证

//failed to authenticate with server 
[request setValue:@"tokenHere" forHTTPHeaderField:@"token"]; 
[request setValue:@"def" forHTTPHeaderField:@"nonce"]; 

//failed as well 
NSDictionary *authToken = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"tokenHere", @"token", 
          @"def", @"nonce", 
          nil]; 

[request setValue:[NSString stringWithFormat:@"Token %@", authToken] forHTTPHeaderField:@"Authorization"]; 

//failed again 
[request setValue:@"Authorization: Token token='tokenHere', nonce='def'" forHTTPHeaderField:@"Authorization"]; 

后端服务器在红宝石编程,并期待一个头,看起来就像上面的例子。我需要一些帮助来设计价值,以便它能够与后端一起工作。

回答

7

这只是一个猜测,因为正确的答案完全取决于服务器的期望;但是,使用其他身份验证方案作为模型,头会是这个样子:

NSString *authHeader = [NSString stringWithFormat:@"token=\"%@\", nonce=\"%@\"", @"tokenHere", @"def"]; 
[myMutableRequest setValue:authHeader forHTTPHeaderField:@"Authorization"]; 

换句话说,报头字段的名称是“授权”,它的值是逗号分隔的name = value对。您的规范是没有意义的唯一部分是“令牌”的额外提到,在

...令牌令牌= ...

+0

原来,我需要转义双引号并摆脱“Authentication:”适当的请求看起来像:'[request setValue:@“Token token = \”tokenHere \“,nonce = \”def \“”forHTTPHeaderField:@“Authorization”]; ' – ScottOBot