7

NTLM 認証で保護され、クライアント証明書が必要なサーバーにアクセスしようとしています。NSURLConnection のデリゲート メソッドを使用して認証し、UIWebview で結果を取得しています。

サーバーがクライアント証明書を必要とする場合、NTLM認証と認証のコードを開発することができました:

- (void) connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {    

    authMethod = challenge.protectionSpace.authenticationMethod;

    if ( [challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] )
    {
        [challenge.sender useCredential:[NSURLCredential credentialForTrust: challenge.protectionSpace.serverTrust] forAuthenticationChallenge: challenge];
        return;
    }

    if ( [challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodClientCertificate] )
    {
        [... code to extract certificate ...]  
        NSURLCredential *credential = [NSURLCredential credentialWithIdentity:myIdentity certificates:(NSArray*)certsArray persistence:NSURLCredentialPersistencePermanent];
        [challenge.sender useCredential:credential forAuthenticationChallenge:challenge];
        return;
    }

    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodNTLM])
    {
        NSURLCredential *credential;
        credential = [NSURLCredential
                      credentialWithUser:@"user"
                      password:@"password"
                      persistence:NSURLCredentialPersistencePermanent];
        [challenge.sender useCredential:credential forAuthenticationChallenge:challenge];
        return;
    }
    [[challenge sender] performDefaultHandlingForAuthenticationChallenge:challenge];
}

サーバーがNTLM認証またはクライアント証明書を個別に必要とする場合、すべてが正常に機能します。一緒に必要な場合、証明書情報と NTLM 資格情報の両方がサーバー側で受信されますが、IIS7 はクライアント証明書を要求する 403 ページを返します...

willSendRequestForAuthenticationChallenge がこの順序で 4 回呼び出されることを知っておく必要があるかもしれません。

willSendRequestForAuthenticationChallenge: NSURLAuthenticationMethodServerTrust
willSendRequestForAuthenticationChallenge: NSURLAuthenticationMethodClientCertificate
willSendRequestForAuthenticationChallenge: NSURLAuthenticationMethodNTLM
willSendRequestForAuthenticationChallenge: NSURLAuthenticationMethodClientCertificate

何かアイデアがあれば?

前もって感謝します、

4

1 に答える 1

1

iOS 7 では動作し、iOS 8 では動作しませんでした。iOS 8 を使用していますか? iOS 7 (シミュレーターなど) でテストして、iOS 8 のみの問題であることを確認します。ログウィンドウに表示される可能性のある「ストリームは開かれる前にイベントを送信しています」というエラーと関係があります。また、iOS で修正されるまで待っていますが、最新の 8.2 ベータ 3 でも表示されます。

于 2015-01-06T17:20:55.670 に答える