2010-07-02 35 views
5

Tôi đã chiến đấu với OAuth và Twitter trong 2 tuần để cố gắng triển khai. Sau nhiều lần viết lại mã của tôi, cuối cùng tôi đã có một thư viện thực hiện yêu cầu vì nó phải dựa trên thông số 1.0. Tôi đã xác minh nó bằng cách sử dụng this verifier on Google Codethis verifier from Hueniverse.Twitter có triển khai thông số kỹ thuật tắt OAuth không? (C#)

Phiên bản của tôi, phiên bản Google và phiên bản Hueniverse đều có cùng chữ ký chính xác, vì vậy tôi đã kết luận rằng tôi không còn là nguyên nhân nữa (nhưng tôi có thể đặt chân vào miệng bằng cách nêu rõ điều này ...).

Tôi kiểm tra triển khai của mình trước tiên bằng cách tạo yêu cầu thử nghiệm bằng cách sử dụng Bảng điều khiển API của Twitter, trong trường hợp này là cập nhật trạng thái. Tôi sao chép các thông số thay đổi, oauth_nonce và oauth_timestamp, thành tất cả ba người ký nêu trên. Tất cả các thông số khác luôn giống nhau, mã thông báo/bí mật/v.v.

Bàn điều khiển của Twitter tạo ra một chữ ký, nhưng ba thứ khác ở trên tất cả tạo ra một chữ ký khác (từ Twitter, giống hệt nhau).

Vì vậy, câu hỏi của tôi là, tại sao tôi nhận được điều này:

<?xml version="1.0" encoding="UTF-8"?> 
<hash> 
    <request>/1/statuses/update.xml</request> 
    <error>Could not authenticate with OAuth.</error> 
</hash> 

... khi tôi nên được thực hiện spec để chữ "T"?

Có điều gì đó cụ thể mà Twitter cần/muốn như là một phần của yêu cầu không? Tôi đã đếm số nonce do Twitter tạo ra là 42 ký tự, có đúng không? Có nên dài 42 ký tự không?

Tôi sẽ đánh giá cao sự trợ giúp của bất kỳ ai có cái nhìn sâu sắc hơn về API hơn tôi rõ ràng là ...

Cảm ơn bạn trước!

CẬP NHẬT: Có người hỏi về cách tôi gửi thông số xác thực nhưng đã xóa bài đăng của họ, idk lý do. Dù sao, các thông số ủy quyền được gửi qua tiêu đề Ủy quyền.

CẬP NHẬT/GIẢI PHÁP:Được di chuyển xuống dưới cùng nơi nó thuộc về câu trả lời.

Trả lời

0

Một hơi muộn, nhưng theo gợi ý của @ poke, tôi đang thêm câu trả lời của tôi xuống đây:

Vì vậy, tôi đã tìm ra và thực sự khá ngu ngốc. Một thời gian trở lại, có lẽ viết lại 3, tôi đã nhận được phản hồi không phải XML xấu từ Twitter. Sau đó tôi thấy rằng trong Bảng điều khiển API Twitter, chúng thoát khỏi tiêu đề params: param=\"value\". Tôi đã thêm dấu gạch chéo ngược để khai thác và ngay lập tức tôi đã nhận được phản hồi XML. Vì vậy, nó bị mắc kẹt.

Dù sao, chỉ để loại bỏ mọi thứ từ viết lại 7 (hoặc 8), tôi quyết định xóa dấu gạch chéo ngược khỏi chuỗi tham số tiêu đề và giải quyết mọi thứ.

Vì vậy, bài học rút ra từ tất cả những điều này là không phải mọi thứ mà màn hình Bảng điều khiển API của Twitter sẽ được bắt chước. Tôi thực sự sẽ đề nghị thêm rằng Twitter cập nhật giao diện điều khiển để hiển thị chuỗi tiêu đề trông như thế nào khi được gửi chứ không phải hệ thống của chúng tạo ra nội bộ, phân tích cú pháp dấu chéo ngược.

2

Vấn đề duy nhất tôi có khi triển khai đặc tả OAuth với Twitter là mục tiêu chính, rằng Twitter đã hạn chế nonce chỉ chấp nhận các ký tự ASCII (trong khi đặc tả thực sự cho phép bất kỳ byte nào). Do đó, tôi đã thay đổi cách triển khai của mình để tạo một int ngẫu nhiên (với 60 bit, dài hơn 42 ký tự) thay thế.

Ngoài ra, triển khai của Twitter có vẻ hoàn toàn chính xác; ít nhất tôi không có vấn đề gì.

tôi đề nghị bạn sử dụng một số trong rất nhiều sandboxes OAuth xung quanh (ví dụ this hoặc this) để thực sự kiểm tra xem mọi thứ diễn ra đúng và ví dụ nếu bạn bao gồm tất cả mọi thứ cần thiết vào chữ ký vv ..

+0

Vâng, tôi đã tìm ra, và nó khá ngu ngốc ... Trả lời ở trên. Dù sao, về chủ đề của nonce, tôi có một hàm lặp qua a-z, A-Z, 0-9 và xây dựng cho tôi một chuỗi sẽ luôn là ASCII, vì vậy tôi giỏi ở đó, tôi nghĩ vậy. – Gup3rSuR4c

+0

Điều tốt để nghe :) Nhưng bạn có thể muốn chuyển câu trả lời của riêng bạn thành một câu trả lời mới cho câu hỏi này và chấp nhận điều đó, để đánh dấu câu hỏi là đã được giải quyết. Nếu không, nó sẽ vẫn mở. – poke

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