HttpWebRequest不传递凭据
我试图使用HTTPWebRequest
来访问REST服务,并且在传递证书时遇到问题,请参阅下面的代码。 我读过NetworkCredential
不支持SSL,而且正在打HTTPS站点。 有没有人知道类似于支持SSL的NetworkCredential
?
Uri requestUri = null; Uri.TryCreate("https://mywebserver/webpage", UriKind.Absolute, out requestUri); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri); NetworkCredential nc = new NetworkCredential("user", "password"); request.Credentials = nc; request.Method = WebRequestMethods.Http.Get; HttpWebResponse response = (HttpWebResponse)request.GetResponse();
如果你的服务器使用NTLM身份validation,你可以试试这个:
CredentialCache cc = new CredentialCache(); cc.Add( new Uri("https://mywebserver/webpage"), "NTLM", new NetworkCredential("user", "password")); request.Credentials = cc;
当你使用老式的方法时,看看它是否显示出来:
string credentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("user"+ ":" + "password")); request.Headers.Add("Authorization", "Basic " + credentials);
什么样的身份validation机制在保护Web服务? 在HttpWebRequest
设置的凭据只能通过HTTP的Authorization
头通过Basic , Digest或NTLM传递。 因此,如果您的Web服务受到WS-Security
保护,则NetworkCredentials
可能根本不会传递到身份validationscheme,因为WS-Security
不会在HTTP级别上运行。
你应该做的是通过命令行工具wsdl.exe
或类似的东西为Web服务创build一个Web服务客户端代理。 这将使您可以访问Web Serviceauthentication身份validationscheme。
更新后的评论:
看起来HttpWebRequest
需要通过401 Unauthorized
接收WWW-Authenticate
挑战,才能通过SSL进行正确的authentication。 我想在HttpWebRequests
有两个单独的代码path处理常规的HTTP通信和encryption的HTTPS通信。 无论如何,你应该尝试的是:
- 执行未经身份validation的
HttpWebRequest
到https://.../
URI。 - 收到
401 Unauthorized
回复。 - 执行相同的请求,现在与两个
Credentials
集(不知道如果PreAuthenticate
应该是true
或false
;testing两者)。 - 您现在应该可以获得
200 OK
或者您的Web Service响应的任何内容。
另一种select是在初始请求中自己构buildAuthorization
头部:
string credentials = String.Format("{0}:{1}", username, password); byte[] bytes = Encoding.ASCII.GetBytes(credentials); string base64 = Convert.ToBase64String(bytes); string authorization = String.Concat("Basic ", base64); request.Headers.Add("Authorization", authorization);
尝试设置request.PreAuthenticate为true。
- 为什么javascript onchange事件在自动完成时不会触发?
- 如何在GridView中添加页眉和子标题
- 为HTTP POST / GET请求启用ASP.NET ASMX Web服务
- 我是如何在构造函数之后立即得到这个NullReferenceException错误的?
- 值/文本更改服务器端后,从文本框中获取文本/值
- 如何configurationstream利的NHibernate输出查询,而不是控制台跟踪或debugging?
- 什么是IIS应用程序池?
- 如何将您的ASP.NET应用程序部署到活服务器?
- SQLnetworking接口,错误:50 – 发生本地数据库运行时错误。 无法创build自动实例