2013-02-26 26 views
5

Tôi gặp sự cố khi cố gắng thực hiện yêu cầu web đối với UGC và xác thực bằng oAuth. Tôi đang thực hiện yêu cầu trên web, chẳng hạn như: -Dịch vụ UGC Tridion và xác thực oAuth

WebRequest wr = WebRequest.Create("http://ugc.service/odata.svc/Ratings(Id=200)"); 
wr.Headers["authorization"] = "OAuth " + auth; 

Trong đó auth là mã thông báo của tôi được trả về từ access_token.svc. Theo tài liệu token trở về từ các dịch vụ nên được một cái gì đó như: -

HufXeuUt% 2FYYElA8SYjJOkUkrXxV9dyXRirmKhjW% 2Fb% 2FU% 3D

Tuy nhiên, những gì tôi đang được trở về từ access_token.svc là giống như: -

{ "access_token": "client_id% 3dtestuser% 26expiresOn% 3d1361898714646% 26digest% 3d% 2fW% 2fvyhQneZHrm1aGhwOlgLtA9xGWd77hkxWbjmindtM% 3d", "expires_in": 300}

tôi đã phân tích cú pháp JSON để trích xuất các chuỗi khác nhau và đã cố gắng chuyển những thông tin này qua ủy quyền nhưng bất kỳ điều gì tôi cố gắng gặp phải lỗi gs - "ERROR OAuth2AccessToken - Thông báo sai." Chính xác phần nào của mã thông báo và định dạng nào tôi nên chuyển qua để ủy quyền?

Rất cám ơn

John

+0

Câu hỏi khó, tôi hầu như không có bất kỳ trải nghiệm nào với OAuth. Nhưng tôi biết rằng các thuộc tính được truyền qua các tiêu đề được đặt trước bằng oauth_ ví dụ: oauth_consumer_key, oauth_token. Các thuộc tính trả về dường như tôi có thể sử dụng được trong một chuỗi truy vấn. Sử dụng thư viện OAuth có thể giúp bạn một chút. http://oauth.net/code/ –

+1

Tôi đã gắn thẻ lại để bao gồm oauth và odata vì điều này có vẻ như là một vấn đề với điều đó hơn là Tridion. Hãy thử tìm kiếm các câu hỏi xung quanh các chủ đề đó. –

Trả lời

5

Giống như bạn đã đề cập, các giao thức là thế này:

  1. Bạn thực hiện một yêu cầu bưu điện đến access token điểm cuối để nhận mã (bạn cần để cung cấp tại đây client_id của bạn và client_secret của bạn dưới dạng tiêu đề hoặc dưới dạng tham số truy vấn);

  2. Bạn nhận được câu trả lời tương tự như sau: {"access_token":"sometoken","expires_in":300}; 2.1 Đáng biết là mã thông báo được mã hóa url và theo định dạng UTF-8, ở bên Java bạn cần phải thực hiện URLDecoder.decode("sometoken", "UTF-8"); trong khi ở bên .NET bạn cần thực hiện HttpUtility.UrlDecode("sometoken", System.Text.Encoding.UTF8);;

  3. Yêu cầu tiếp theo của bạn cần bao gồm tiêu đề ủy quyền. Về phía Java bạn làm builder.header("authorization", "OAuth " + decodedTokenString); khi đứng về phía NET bạn có thể sử dụng Client.Headers["authorization"] = "OAuth " + DecodedTokenString;

Đáng nói là SharedSecret định nghĩa trong cd_webservice_conf.xml (/Configuration/AuthenticationServer/SharedSecret/) của TokenAccessPoint cần phải được giống như SharedSecret quy định tại cd_ambient_conf.xml (/Configuration/Security/SharedSecret/) của (WebService) EndPoint.

Bạn có chắc chắn đã giải mã đúng mã thông báo nhận được từ máy chủ không? Bạn có chắc chắn rằng bạn đã cấu hình SharedSecret thích hợp trong hai tệp cấu hình?

Hy vọng điều này sẽ hữu ích.

+0

Xin chào Daniel, xin lỗi vì đã không cập nhật điều này sớm hơn. Đó là giải mã mã thông báo, như bạn đã chỉ ra một cách chính xác và một giá trị cấu hình không chính xác đã gây ra vấn đề cho chúng tôi. Tất cả tốt bây giờ. Cảm ơn, John – John

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