14

Vì vậy, tôi đã làm việc với DotNetOpenAuth một thời gian, Hôm nay tôi cần thêm hỗ trợ cho nhà cung cấp buộc tôi gửi khóa bí mật bằng Xác thực cơ bản (Tôi đã sử dụng phiên bản cũ và chỉ các thông số Đăng bài)Không thể lấy thông tin đăng nhập mạng để làm việc

Tôi đã thử sử dụng ClientCredentialApplicator.NetworkCredential, nó không hoạt động. Sau đó, theo lời khuyên here, tôi đã tự mình làm ClientCredentialApplicator.

Tôi vẫn không hoạt động, tôi đặt các điểm ngắt trong ApplyClientCredential và chúng không bao giờ bị trúng.

Tôi đã nâng cấp lên phiên bản mới nhất (4.3.0.0), cần có this fix.

Mọi thứ hoạt động nhưng không có tiêu đề Authorization và máy chủ từ xa trả lời với lỗi 301 (khiến tôi cho rằng đó là vấn đề tương tự như cam kết - thông tin ủy quyền không được thêm vào yêu cầu cho đến khi máy chủ trả lời Unauthorized và nhà cung cấp tôi đang sử dụng câu trả lời với 301 khi không có tiêu đề Authorization)

+0

Tất cả câu trả lời ở đâu? – Madd0g

+1

Bạn có gặp bất kỳ lỗi nào không? Bạn có một số đăng nhập trong ứng dụng của bạn mà in các mã trả lại? –

+0

Tôi thấy nhà cung cấp trả về lỗi trong Fiddler, tôi biết nhà cung cấp yêu cầu tiêu đề ủy quyền và nó không được gửi đi. Không có lỗi không được giải quyết nào từ thư viện – Madd0g

Trả lời

0

Bạn có thể thêm thủ công tiêu đề xác thực cơ bản vào HttpWebRequest bằng cách truy cập bộ sưu tập request.Headers.

Bạn có thể thêm tiêu đề sau khi chỉ vào Wikipedia:

request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new UTF8Encoding(false).GetBytes("username:password"))); 
1

Đây là mã. Nó hoạt động với tôi, khi sử dụng WebClients và FtpWebRequests, e.t.c

using System.Net; 

NetworkCredential credentials = new NetworkCredential("user","pass"); 
request.Credentials = credentials; 

Hy vọng nó sẽ giúp :)

0

Tôi đã có một yêu cầu tương tự: một nhà cung cấp OAuth2 đòi hỏi HTTP Basic Authentication. Giải pháp này làm việc cho tôi:

var authServer = new AuthorizationServerDescription { AuthorizationEndpoint = new Uri(AuthorizeUrl), TokenEndpoint = new Uri(AccessTokenUrl) }; 
var authClient = new WebServerClient(authServer, ConsumerKey, ConsumerSecret) 
{ 
    ClientCredentialApplicator = ClientCredentialApplicator.NetworkCredential(ConsumerSecret) 
}; 

Có một vấn đề khi sử dụng constructor DotNetOpenAuth.OAuth2.ClientCredentialApplicator.NetworkCredentialApplicator mà phải mất một thể hiện của System.Net.NetworkCredential. Phương thức ApplyClientCredential sử dụng cá thể ClientSecret không phải là thuộc tính Password từ thông tin đăng nhập (xem bên dưới).

public override void ApplyClientCredential(string clientIdentifier, HttpWebRequest request) 
{ 
    if (clientIdentifier == null) 
    return; 
    if (this.credential != null) 
    ErrorUtilities.VerifyHost((string.Equals(this.credential.UserName, clientIdentifier, StringComparison.Ordinal) ? 1 : 0) != 0, "Client identifiers \"{0}\" and \"{1}\" do not match.", (object) this.credential.UserName, (object) clientIdentifier); 
    OAuthUtilities.ApplyHttpBasicAuth(request.Headers, clientIdentifier, this.clientSecret); 
} 

Tôi biết câu hỏi này cũ, hy vọng điều này sẽ giúp người khác tìm kiếm giải pháp.

Các vấn đề liên quan