Rus*_*ark 32 c# asp.net httpwebrequest
我正在尝试使用HTTPWebRequest
访问REST服务,并且在传递凭据时遇到问题,请参阅下面的代码.我读过它NetworkCredential
不支持SSL,而且我正在访问HTTPS站点.有没有人知道类似于NetworkCredential
支持SSL的类?
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();
Run Code Online (Sandbox Code Playgroud)
Ed *_*wer 48
查看使用旧式方法时是否显示:
string credentials = Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes("user"+ ":" + "password"));
request.Headers.Add("Authorization", "Basic " + credentials);
Run Code Online (Sandbox Code Playgroud)
Asb*_*erg 26
什么样的身份验证机制保护Web服务?设置的凭据HttpWebRequest
将仅Authorization
通过Basic,Digest或NTLM通过HTTP的标头传递.因此,如果您的Web服务受到保护WS-Security
,NetworkCredentials
则可能根本不会将其传递给身份验证方案,因为WS-Security
它不在HTTP级别运行.
您应该做的是通过命令行工具wsdl.exe
或类似的东西为Web服务创建Web服务客户端代理.这将使您可以访问Web服务感知的身份验证方案.
评论后更新:
在通过SSL进行正确身份验证之前,似乎HttpWebRequest
需要接受WWW-Authenticate
挑战401 Unauthorized
.我想在HttpWebRequests
处理常规HTTP流量和加密的HTTPS流量时有两个独立的代码路径.无论如何,你应该尝试的是:
HttpWebRequest
身份验证的https://.../
URI.401 Unauthorized
回复.Credentials
设置(不确定是否PreAuthenticate
应该true
或false
;测试两者).200 OK
或者您的Web服务响应的任何内容.另一个选择是Authorization
在初始请求上自己构建标题:
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);
Run Code Online (Sandbox Code Playgroud)
Dar*_*rov 21
如果您的服务器使用NTLM身份验证,您可以尝试这样做:
CredentialCache cc = new CredentialCache();
cc.Add(
new Uri("https://mywebserver/webpage"),
"NTLM",
new NetworkCredential("user", "password"));
request.Credentials = cc;
Run Code Online (Sandbox Code Playgroud)