Cơ chế xác thực nào đang bảo vệ dịch vụ web? Thông tin xác thực được đặt trên HttpWebRequest
sẽ chỉ được chuyển qua tiêu đề Authorization
của HTTP qua Basic, Digest hoặc NTLM. Vì vậy, nếu dịch vụ web của bạn được bảo vệ bằng WS-Security
, thì NetworkCredentials
có thể sẽ không được chuyển sang sơ đồ xác thực, vì WS-Security
không hoạt động ở cấp HTTP.
Điều bạn cần làm là tạo proxy máy khách dịch vụ Web cho dịch vụ web thông qua công cụ dòng lệnh wsdl.exe
hoặc một cái gì đó tương tự. Điều đó sẽ cho phép bạn truy cập vào các lược đồ xác thực nhận thức dịch vụ Web.
Cập nhật sau khi nhận xét:
Nó có vẻ như HttpWebRequest
nhu cầu để nhận được các thách thức WWW-Authenticate
với một 401 Unauthorized
trước khi nó có thể xác thực đúng qua SSL. Tôi đoán có hai đường dẫn mã riêng biệt trong HttpWebRequests
xử lý lưu lượng HTTP thông thường và lưu lượng HTTPS được mã hóa. Dù sao, những gì bạn nên thử, là:
- Thực thi chưa được xác thực
HttpWebRequest
đến https://.../
URI.
- Nhận phản hồi
401 Unauthorized
.
- Thực hiện cùng một yêu cầu, bây giờ với cả hai
Credentials
đặt (không chắc chắn nếu PreAuthenticate
phải là true
hoặc false
; kiểm tra cả hai).
- Bây giờ bạn sẽ nhận được
200 OK
hoặc bất cứ điều gì Dịch vụ web của bạn phản hồi.
Một lựa chọn khác là xây dựng Authorization
tiêu đề mình theo yêu cầu ban đầu:
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);
Nguồn
2009-11-09 17:31:40
này làm việc cho tôi, cảm ơn. –