2011-05-09 32 views
16

Tôi đã triển khai experimental OAuth support cho Máy ứng dụng của Google bằng Python và làm việc tại địa phương, nhưng các điểm cuối đang ném 400 khi tôi triển khai đến appspot.Điểm cuối OAuth của Máy ứng dụng Google ném 400 vào sản xuất

Ví dụ: http url: //my-app.appspot.com/_ah/OAuthGetRequestToken trả về 400 nhưng mẫu url cục bộ hoạt động như mong đợi.

Tôi đã thử cả http và https và giả sử rằng appspot xử lý chứng chỉ ssl.

CẬP NHẬT

Tôi đã sử dụng các OAuth Playground để kiểm tra mã của tôi. Mặc dù tài liệu, có vẻ như Đăng ký ứng dụng của bạn là yêu cầu. Truy cập here để biết hướng dẫn về cách đăng ký. Theo tài liệu trong quá trình đăng ký, chứng chỉ không bắt buộc khi chạy trên App Engine. Sân chơi đang hiển thị chi tiết hơn về lỗi - "chữ ký không hợp lệ". Nếu tôi hiểu đúng, chữ ký được tạo ra từ một chuỗi ký tự cơ sở. Trong trường hợp này tôi đang sử dụng chuỗi cơ sở 7DYB6MJ2s-IQcd7VJYJUmcct.

GET /accounts/OAuthGetRequestToken?scope=https%3A%2F%2Fmail.google.com%2Fmail%2Ffeed%2Fatom HTTP/1.1 
Host: www.google.com 
Accept: */* 
Authorization: OAuth oauth_version="1.0", oauth_nonce="168cfd60a93a46caa38dddfdcedd9de9", oauth_timestamp="1305315895", oauth_consumer_key="xxxxxxx.appspot.com", oauth_callback="http%3A%2F%2Fgooglecodesamples.com%2Foauth_playground%2Findex.php", oauth_signature_method="HMAC-SHA1", oauth_signature="4J5faUujE0VNaybyvFCiEPY7DQ8%3D" 

HTTP/1.1 400 Bad Request 
Content-Type: text/plain; charset=UTF-8 
Date: Fri, 13 May 2011 19:44:55 GMT 
Expires: Fri, 13 May 2011 19:44:55 GMT 
Cache-Control: private, max-age=0 
X-Content-Type-Options: nosniff 
X-XSS-Protection: 1; mode=block 
Content-Length: 451 
Server: GSE 

**signature_invalid** 
base_string:GET&https%3A%2F%2Fwww.google.com%2Faccounts%2FOAuthGetRequestToken&oauth_callback%3Dhttp%253A%252F%252Fgooglecodesamples.com%252Foauth_playground%252Findex.php%26oauth_consumer_key%3Dxxxxxx.appspot.com%26oauth_nonce%3D168cf60a94caa38e2defdcedd9de9%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1305315895%26oauth_version%3D1.0%26scope%3Dhttps%253A%252F%252Fmail.google.com%252Fmail%252Ffeed%252Fatom 

CẬP NHẬT CUỐI CÙNG

Có hai điều khiến 400. Thứ nhất, ứng dụng đã không được đăng ký. Tài liệu của Google cho biết đó là tùy chọn, nhưng đó không phải là trường hợp rõ ràng. Thứ hai, Yêu cầu không được ký đúng cách. Đây là công cụ gỡ lỗi tuyệt vời để kiểm tra Yêu cầu OAuth của bạn: Oauth Playground

+0

Bạn có cố gắng đổ (hoặc đăng nhập) văn bản phản hồi 400 không? thường tất cả các nhà cung cấp dịch vụ cung cấp ý nghĩa đầy đủ hơn thông tin bên trong 400 mã? – Jeyara

+0

Thật không may văn bản phản hồi là mô tả 400 tiêu chuẩn và bảng điều khiển không yêu cầu ghi nhật ký cho bất kỳ điểm cuối OAuth nào (mà tôi giả định có nghĩa là Yêu cầu đang được xử lý ngoài phạm vi ứng dụng của tôi). –

+0

Bạn chỉ có 27 đại diện, bạn đang làm như thế nào với 200 đại diện? – contactmatt

Trả lời

4

Bạn phải đăng ký miền của mình để có OAuth hoạt động trên sản xuất.

Mặc dù các tài liệu sau đây nêu rằng việc đăng ký là không bắt buộc: http://code.google.com/apis/accounts/docs/RegistrationForWebAppsAuto.html

Nó không làm việc mà không cần đăng ký kể từ tháng Giêng.

Nhìn vào liên kết ở trên và Đăng ký tên miền/ứng dụng của bạn. Bạn không cần gửi chứng chỉ, đây vẫn là tùy chọn.

+0

@eduardocereto - Yep ứng dụng này không được đăng ký dựa trên giả định rằng nó là tùy chọn, VÀ rằng nó trên Google App Engine (và xác minh là tự động để nói, đăng ký tên miền). Tôi sẽ đăng ký ngay bây giờ. . . –

+0

Tôi đã có thể gặp lỗi cụ thể hơn, "chữ ký không hợp lệ". Chữ ký được tạo ra từ chuỗi chữ ký cơ sở, trong trường hợp của tôi là "7DYB6MJ2s-IQcd7VJYJUmcct". Tôi có hiểu nhầm việc tạo chữ ký không? –

+0

Sự cố đã kết thúc là ứng dụng không được đăng ký (họ cần cập nhật tài liệu của họ) VÀ Yêu cầu không được ký đúng cách. Tôi đã tìm thấy một công cụ gỡ lỗi tuyệt vời để nhận thông báo lỗi chi tiết hơn khi gửi yêu cầu OAuth: http://googlecodesamples.com/oauth_playground/ –

0

Phương thức yêu cầu nào? Trong dev_appserver_oauth.py tôi thấy:

if method != 'GET' and method != 'POST': 
    outfile.write('Status: 400\r\n') 
    return 

Vì vậy, nó sẽ chỉ làm việc cho GET hoặc POST yêu cầu.

+0

Đó là một GET. Nó hoạt động cục bộ (bạn đang xem DEV_appserver_oauth.py), nhưng không phải khi tôi triển khai đến appspot. –

+0

Được rồi, tôi đã tìm trong SDK để tìm kiếm manh mối và đó là 400 mà tôi tìm thấy. Vì vậy, có lẽ nó là một lỗi sản xuất. – moraes

+0

Đó là kết luận duy nhất của tôi vào thời điểm này, và với I/O đang diễn ra, tôi nghi ngờ tôi sẽ sớm tìm câu trả lời;) –

0

Trước tiên hãy đảm bảo bạn đã bật Đăng nhập được liên kết trong Cài đặt ứng dụng của bạn.

screenshot admin panel

Từ mô tả của bạn có vẻ như bạn có thể chỉ được thực hiện một yêu cầu GET trực tiếp đến /_ah/OAuthGetRequestToken mà không cần bất kỳ các thông số cần thiết khác của OAuth. Điều này sẽ làm việc trên dev_appserver vì nó chỉ đơn giản là một mockup của oAuth để cho phép bạn xác định mã của bạn.

Xem các tham số được liệt kê trên OAuthGetRequestToken description page cho những gì được yêu cầu và cách xử lý ký. Tôi tin rằng bạn có thể bỏ qua scope cho GAE mặc dù

+0

Tôi sắp hỏi về phạm vi vì chúng tôi đang sử dụng OAuth để ký Yêu cầu vào Người dùng API. Tôi sẽ kiểm tra điều này, cảm ơn. –

+0

Từ tài liệu: "App Engine không hỗ trợ các tham số phạm vi và tham số deleteuth_displayname. Phạm vi cho yêu cầu là toàn bộ ứng dụng". –

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