HTTP身份验证类型在iOS客户端应用程序中协商

时间:2012-09-28 20:32:00

标签: ios asihttprequest kerberos http-authentication negotiate

iOS应用程序是否支持“协商”HTTP身份验证方案?

我正在尝试访问使用此身份验证方案的服务器。我目前正在使用ASIHTTPRequest类,它在内部使用CFNetwork库。身份验证无法发生,并且通过ASIHTTPRequest代码进行跟踪,我发现在通过调用CFHTTPAuthenticationCreateFromResponse函数创建的CFHTTPAuthentication对象未通过CFHTTPAuthenticationIsValid函数进行检查后,它失败了。返回的错误是“kCFStreamErrorHTTPAuthenticationTypeUnsupported = -1000”。它用于尝试创建CFHTTPAuthentication的响应具有“WWW-Authenticate = Negotiate”标头。这让我觉得不支持谈判方案。但是,CFHTTPAuthentication的库文档将“kCFHTTPAuthenticationSchemeNegotiate”列为“iOS 2.0及更高版本中可用”。

以下是来自attemptToApplyCredentialsAndResume方法的ASIHTTPRequest.m代码的相关部分。

// Read authentication data
if (!requestAuthentication) {
    CFHTTPMessageRef responseHeader = (CFHTTPMessageRef) CFReadStreamCopyProperty((CFReadStreamRef)[self readStream],kCFStreamPropertyHTTPResponseHeader);
    requestAuthentication = CFHTTPAuthenticationCreateFromResponse(NULL, responseHeader);
    CFRelease(responseHeader);
    [self setAuthenticationScheme:[(NSString *)CFHTTPAuthenticationCopyMethod(requestAuthentication) autorelease]];
}

//SNIP

// See if authentication is valid
CFStreamError err;      
if (!CFHTTPAuthenticationIsValid(requestAuthentication, &err)) {

    CFRelease(requestAuthentication);
    requestAuthentication = NULL;

我对谈判计划本身也有点困惑。据我了解,如果可能的话,它应该尝试使用Kerberos方案,如果没有,则回到NTLM方案。 iOS上支持NTLM方案,但这种回退似乎没有发生,至少不是CFHTTPAuthenticationCreateFromResponse处理它的方式。

2 个答案:

答案 0 :(得分:1)

iOS 7上的Safari支持通过HTTP协商进行单点登录(SSO):

  

要配置SSO,iOS支持配置配置文件有效负载,允许MDM服务器下推必要的设置。这包括设置用户主体名称(即Active Directory用户帐户)和Kerberos领域设置,以及配置应允许哪些应用程序和/或Safari Web URL使用SSO。

来源:iOS Security, Feb 2014(第18页)

答案 1 :(得分:0)

iPhone上不支持Kerberos。谈判回落到NTLM,但不要指望iOS支持专有的身份验证方案。可能存在第三方实施。