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处理它的方式。
答案 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支持专有的身份验证方案。可能存在第三方实施。