2010-09-08 23 views
5

mã dưới đây của tôi trả về một lỗi trái phép 401 mỗi lần ở điểm này:401 Unauthorized sử dụng Yahoo OAuth

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://query.yahooapis.com/v1/yql?q=select%20fields.value%20from%20social.contacts%20where%20guid%3Dme&diagnostics=false"); 
request.Headers.Add(
    "Authorization: OAuth " + 
    "realm=\"" + "yahooapis.com" + "\"," + 
    "oauth_consumer_key=\"" + ConfigurationManager.AppSettings["yahoo_oauth_consumer_key"] + "\"," + 
    "oauth_nonce=\"" + Guid.NewGuid().ToString() + "\"," + 
    "oauth_signature_method=\"" + "PLAINTEXT" + "\"," + 
    "oauth_timestamp=\"" + ((DateTime.UtcNow.Ticks - new DateTime(1970, 1, 1).Ticks)/(1000 * 10000)).ToString() + "\"," + 
    "oauth_token=\"" + accessToken.TokenValue + "\"," + 
    "oauth_version=\"1.0" + "\"," + 
    "oauth_signature=\"" + ConfigurationManager.AppSettings["yahoo_oauth_signature"] + "%26" + "\"" 
); 
StreamReader streamReader = new StreamReader(request.GetResponse().GetResponseStream(), true); 

Và khi tôi bước vào mã mỗi khi nhìn thấy tất cả các thông tin là có mà Yahoo yêu cầu phải có trong tiêu đề, tuy nhiên mỗi lần tôi có được điều này 401.

Trả lời

1

Ok trước hết là:

http://www.youtube.com/watch?v=lZLP0siJI-8&feature=related

thứ hai, giải pháp;

Đừng chạy nó từ localhost: P

Khi tôi đã đăng ký trên Yahoo tôi nên đã đọc thêm một cách cẩn thận, tôi đã đăng ký một lần thứ hai chỉ để nhìn thấy, và nó khẳng định rõ ràng từ đó miền sẽ bạn đang thực hiện cuộc gọi đến API của chúng tôi.

+1

cho mục đích phát triển, thử nghiệm và gỡ lỗi bạn được yêu cầu chạy từ máy chủ cục bộ. Có một cách để làm điều đó. Bạn có thể sửa đổi tệp C: \ Windows \ System32 \ drivers \ etc \ hosts thành 127.0.0.1 thành www.YOUR-DOMAIN.com. Bạn có thể thay thế C: \ bằng phân vùng nào đang lưu trữ hệ điều hành Windows của bạn. Tôi chắc chắn hệ điều hành không phải cửa sổ phải có một cách thay thế để làm điều tương tự. –

2

Tôi chắc chắn bạn biết, 401 có nghĩa là không được ủy quyền. Nó có thể có nghĩa là chữ ký của bạn không hợp lệ.

Bạn không đăng tất cả mã của mình nhưng tôi không thể xem nó có thể tạo chữ ký chính xác như thế nào, vì phương pháp chữ ký của bạn dường như không nhận bất kỳ tham số nào - nhất là dấu thời gian và nonce - - như đầu vào. Nếu bạn đã tính toán chữ ký chính xác, thì bạn cần phải sử dụng cùng một dấu thời gian và nonce trong tiêu đề Được ủy quyền; sử dụng một tên khác sẽ có nghĩa là chữ ký không hợp lệ.

1

tôi đã chạy vào điều tương tự ... bạn phải đọc kỹ các spec:

http://developer.yahoo.com/oauth/guide/oauth-requesttoken.html

Cẩn thận làm theo hướng dẫn đối với từng lĩnh vực. Ví dụ, tôi không thấy rằng bạn đã chỉ định oauth_callback = "oob". Tôi đã bỏ lỡ lĩnh vực đó, ngay sau khi tôi chỉ định nó, tôi đã nhận được mã thông báo.

+1

Ồ, và localhost không * không * quan trọng. – djunod

0

Tôi đang trả lời với hy vọng rằng nó sẽ giúp người khác.

Yahoo! lưu trữ tên miền bằng chữ thường và tôi đã lưu trữ tên miền trong trường hợp hỗn hợp trong biến gọi lại.

Vì vậy, tôi đã chuyển đổi tên miền thành tất cả chữ thường và đặt trước tên miền đó bằng "www." đã giúp tôi giải quyết vấn đề. Cố gắng truy cập Yahoo! máy chủ có URL OAUTH cuối cùng từ bất kỳ trình duyệt nào để xem thông báo lỗi thực tế. Trong ứng dụng, nó chỉ nói "trái phép".

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