我正在尝试通过应用Windows身份验证安全性来调用IIS上托管的Web服务。

我正在将Delphi XE与INDY 10和TIdHttp组件一起使用。

如果输入有效的用户名和密码,我可以成功调用Web服务,但是我想使用Integrated Security,以便它自动使用调用线程中的凭据,并且不需要用户手动输入其详细信息。

我在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网站上看到评论,表明有可能这样做,但不幸的是,我收到了“ HTTP / 1.1 401未经授权”。

有没有人有什么建议?

最佳答案

根据雷米·勒博的评论,在解决已知问题之前,INDY似乎无法做到这一点。

我已经用另一种方式解决了我的问题,如果有人感兴趣,我会在这里发布。

首先,我导入了WinHTTP类型库(C:\ Windows \ system32 \ winhttp.dll),并将WinHttp_TLB添加到了uses子句。

然后我像这样使用它:

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;

09-26 18:57