Ứng dụng C# của tôi truy cập máy chủ web sử dụng xác thực NTLM.Cách 'chia sẻ' xác thực NTLM qua nhiều HttpWebRequests?
Tôi thấy rằng mỗi yêu cầu được gửi tới máy chủ (sử dụng HttpWebRequest mới) được xác thực riêng lẻ. Nói cách khác, mọi yêu cầu dẫn đến phản hồi 401, sau đó một cuộc hội thoại bắt tay NTLM xảy ra trước khi tôi nhận được phản hồi thực tế.
ví dụ:
Đầu tiên yêu cầu GET:
-> GET xyz
<- 401 error (WWW-Authenticate:NTLM)
-> GET xyz (Authorization:NTLM base64stuff)
<- 401 error (WWW-Authenticate:NTLM base64stuff)
-> GET xyz (Authorization: base64stuff)
<- 200
Tiếp theo yêu cầu:
-> GET xyz (Authorization:NTLM base64stuff)
<- 401 error (WWW-Authenticate:NTLM) //can this request be avoided?
-> GET xyz (Authorization: base64stuff)
<- 200
(ban đầu, với PreAuthenticate đặt sai, các yêu cầu tiếp theo trông giống như yêu cầu đầu tiên - tức là ba yêu cầu cơ bản cho mỗi 'yêu cầu')
Có một cách 'chia sẻ' xác thực được thực hiện trên yêu cầu đầu tiên tới máy chủ với HttpWebRequests tiếp theo?
Tôi nghĩ có lẽ thuộc tính UnsafeAuthenticatedConnectionSharing
sẽ cho phép tôi thực hiện việc này, nhưng đặt nó thành true cho tất cả các đối tượng HttpWebRequest được sử dụng trong ứng dụng không có hiệu lực.
Tuy nhiên nếu tôi đặt PreAuthenticate
thành true, một phản hồi 401 ít xảy ra cho mỗi yêu cầu sau lần đầu tiên.
Bạn đang cố gắng giải quyết vấn đề gì? –
Tôi muốn thực hiện 'xác thực' một cách hiệu quả một lần và sử dụng lại điều này trên HttpWebRequests. Thay vì xác thực mỗi khi tôi nhấn máy chủ. Tôi có thể hiểu lầm NTLM mặc dù, và trong thực tế, NTLM áp đặt một chi phí của một yêu cầu thêm trên mỗi yêu cầu thực hiện. – mackenir
Có nhưng vấn đề với cách nó hoạt động là gì, vấn đề gì sẽ giải quyết để thay đổi hành vi mà bạn mô tả về hành vi mà bạn mong muốn, bạn đang cố gắng đạt được điều gì trong thế giới thực. –