Objective-C和抢占式认证

时间:2011-07-15 23:12:02

标签: iphone objective-c ipad apache authentication

我正在尝试从我的Ipad App的WebService获取数据。

为此,我正在使用NSURLConnection和NSMutableURLRequest。

Web服务使用抢占式基本身份验证在Apache-Coyote 1.1上发布,但我不知道如何从Objective-C发送我的凭据。

任何人都知道如何在Objective-C中设置我的用户/密码以使用Apache premptive身份验证系统记录我的客户端?

谢谢。

2 个答案:

答案 0 :(得分:2)

编辑:

为了自己设置信用卡,您需要能够对用户名和密码进行base64编码并设置相应的标头。来自Cocoa With Love的Matt Gallagher在how to add a category to NSData上有一篇很棒的帖子可以很容易地做到这一点。

NSString* username = @"username";
NSString* password = @"password";

NSString* encodedUsername = [[username dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];
NSString* encodedPassword = [[password dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString];

NSURL* url = [NSURL URLWithString:@"http://yourUrl.com/"];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
NSString* headerValue = [NSString stringWithFormat:@"Basic %@:%@", encodedUsername, encodedPassowrd];
[request addValue:@"Authorization" forHTTPHeaderField:headerValue];

[NSURLConnection connectionWithRequest:request delegate:self];

与所有使用凭据一样,请确保您在整个HTTPS中执行此操作,因为这些凭据基本上是以明文形式传递的。

答案 1 :(得分:0)

考虑使用ASIHTTPRequest框架,which makes preemptive Basic authentication requests simple

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com/top_secret/"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setAuthenticationScheme:(NSString *)kCFHTTPAuthenticationSchemeBasic]; /** preemptively present credentials **/
[request setUsername:@"username"];
[request setPassword:@"password"];
[request startSynchronous];
NSError *error = [request error];
if (!error)
    NSString *response = [request responseString];

而且,是的,您肯定希望通过SSL进行基本身份验证(即通过某些https://... URL)。