我正尝试调用托管在IIS上的Web服务,并应用了Windows身份验证安全性。我使用Delphi XE INDY 10和TIdHttp组件。INDY TIdHttp与SSPI集成的安全身份验证问题
我可以成功地调用Web服务,如果我通过在一个有效的用户名和密码,但我想用集成安全性,使其自动调用线程使用的凭据,并且不需要用户手动输入他们的详细资料。
我已经包含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未授权”。
有没有人有任何建议?
你尝试的网址与浏览器(IE,FF)?如果他们工作,你可以使用Fiddler来比较他们与Indy的HTTP通信。 – mjn 2013-02-27 13:44:41
是的。随着提琴手,我可以看到在授权部分有协商的401结果。浏览器和Delphi应用程序(使用用户名/密码)都从Negotiate更改为NTLM,然后返回200.使用Username,Password注释掉它永远不会超过协商401条目。 – Mattl 2013-02-27 13:58:34
'IdAuthenticationSSPI'当前未正确实施“协商”认证。这是一个尚未确定的[已知问题](http://code.google.com/p/indyproject/issues/detail?id=236&start=100)。 – 2013-02-27 18:01:24