4

Windows 認証セキュリティが適用された IIS でホストされている Web サービスを呼び出そうとしています。

私は、INDY 10 と TIdHttp コンポーネントで Delphi XE を使用しています。

有効なユーザー名とパスワードを渡すと Web サービスを正常に呼び出すことができますが、統合セキュリティを使用して、呼び出し元のスレッドからの資格情報を自動的に使用し、ユーザーが詳細を手動で入力する必要がないようにしたいと考えています。

uses 句に IdAuthenticationSSPI を含め、http リクエストを次のように呼び出します。

IdHttp1.Request.BasicAuthentication := False;
IdHttp1.HTTPOptions := [hoInProcessAuth];
// IdHttp1.Request.Username := '...'; // including this works
// IdHttp1.Request.Password := '...'; // including this works

IdHttp1.Get(myURL, myOutputStream);

私の理解では、IdAuthenticationSSPI を使用すると、資格情報が渡されない場合、呼び出し元のスレッドのユーザーになりすますことになります。

atozedsoftware.newsgroups Web サイトで、これが可能であることを示唆するコメントを見たことがありますが、残念ながら「HTTP/1.1 401 Unauthorized」というメッセージが表示されます。

誰か提案はありますか?

4

1 に答える 1

3

Remy Lebeau のコメントに続いて、既知の問題が修正されるまで、これは INDY では不可能のようです。

別の方法で問題を解決しました。他の誰かが興味を持っている場合に備えて、ここに投稿します。

まず、WinHTTP タイプ ライブラリ (C:\Windows\system32\winhttp.dll) をインポートし、uses 句に WinHttp_TLB を追加しました。

次に、次のように使用しました。

var
    http: IWinHttpRequest;
    url: String;
begin
    url := 'my web service';
    http := CoWinHttpRequest.Create;
    try
        http.SetAutoLogonPolicy(0); // Enable SSO
        http.Open('GET', url, False);
        http.Send(EmptyParam);
        ShowMessage(http.ResponseText);
    finally
        http := nil;
    end;
end;
于 2013-02-28T10:13:11.027 に答える