iOS 응용 프로그램에서 "협상"HTTP 인증 구성표가 지원됩니까?HTTP 인증 유형 iOS 클라이언트 응용 프로그램에서 협상
이 인증 체계를 사용하는 서버에 액세스하려고합니다. 현재 내부적으로 CFNetwork 라이브러리를 사용하는 ASIHTTPRequest 클래스를 사용하고 있습니다. 인증이 실패하고 ASHTTPRequest 코드를 통해 추적하면 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 구성표가 아니라면 NTLM 구성표로 되돌려 야합니다. NTLM 체계는 iOS에서 지원되지만 CFHTTPAuthenticationCreateFromResponse가 처리하는 방식과는 달리이 대체는 일어나지 않는 것 같습니다.
아이폰에서 Kerberos에 대한 지원이 없습니다. –
좋아, 그게 내가 기대하고 있었던거야. 그러나,이 동의어는 "아이폰에서 협상을지지하지 않는다"는 말과 동의어입니까? 나는 협상 계획이 Kerberos가 작동하지 않을 때 NTLM으로 돌아 가기로되어 있다고 생각했습니다. – Steve
올바른 내용이지만 iOS가 독점적 인 인증 스키마를 지원하지는 않습니다. 타사 구현을 수행 할 수 있습니다. –