3

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

我正在尝试访问使用此身份验证方案的服务器。我目前正在使用 ASIHTTPRequest 类,它在内部使用 CFNetwork 库。身份验证失败,并且通过 ASIHTTPRequest 代码跟踪我看到它在通过调用 CFHTTPAuthenticationCreateFromResponse 函数创建的 CFHTTPAuthentication 对象未能通过 CFHTTPAuthenticationIsValid 函数检查后失败。返回的错误是“kCFStreamErrorHTTPAuthenticationTypeUnsupported = -1000”。它用于尝试创建 CFHTTPAuthentication 的响应具有“WWW-Authenticate = Negotiate”标头。这让我觉得不支持协商方案。但是 CFHTTPAuthentication 的库文档将“kCFHTTPAuthenticationSchemeNegotiate”列为“

以下是来自 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 处理它的方式。

4

2 回答 2

1

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

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

来源: iOS 安全,2014 年 2 月(第 18 页)

于 2014-03-04T16:43:46.680 回答
0

iPhone 上不支持 Kerberos。协商回退到 NTLM,但不要期望 iOS 支持专有的身份验证方案。可能存在第三方实现。

于 2012-10-02T07:20:06.700 回答