3

「ネゴシエート」HTTP 認証方式は iOS アプリでサポートされていますか?

この認証方式を使用するサーバーにアクセスしようとしています。現在、CFNetwork ライブラリを内部的に使用する ASIHTTPRequest クラスを使用しています。認証が行われず、ASIHTTPRequest コードをトレースすると、CFHTTPAuthenticationCreateFromResponse 関数を呼び出して作成された CFHTTPAuthentication オブジェクトが CFHTTPAuthenticationIsValid 関数によるチェックに失敗した後に失敗することがわかります。返されるエラーは「kCFStreamErrorHTTPAuthenticationTypeUnsupported = -1000」です。CFHTTPAuthentication の作成を試みるために使用する応答には、「WWW-Authenticate = Negotiate」ヘッダーが含まれています。これは、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;

また、Negotiate スキーム自体についてもやや混乱しています。私が理解しているように、可能であれば Kerberos スキームを使用しようとし、そうでない場合は NTLM スキームにフォールバックすることになっています。NTLM スキームは iOS でサポートされていますが、少なくとも CFHTTPAuthenticationCreateFromResponse がそれを処理する方法では、このフォールバックは発生していないようです。

4

2 に答える 2

1

iOS 7 の Safari は、HTTP ネゴシエートによるシングル サインオン (SSO) をサポートします。

SSO を構成するために、iOS は、MDM サーバーが必要な設定をプッシュできるようにする構成プロファイル ペイロードをサポートしています。これには、ユーザー プリンシパル名 (つまり、Active Directory ユーザー アカウント) と Kerberos レルムの設定、および SSO の使用を許可するアプリや Safari Web URL の構成が含まれます。

出典: iOS セキュリティ、2014 年 2 月(18 ページ)

于 2014-03-04T16:43:46.680 に答える
0

iPhone では Kerberos はサポートされていません。Negotiate は NTLM にフォールバックしますが、iOS が独自の認証スキームをサポートすることは想定していません。サードパーティの実装が存在する場合があります。

于 2012-10-02T07:20:06.700 に答える