2015-03-01 24 views
6

Tôi đang cố gắng trao đổi mã ủy quyền Google Plus một lần cho mã thông báo truy cập. Nhưng tôi tiếp tục nhận được 400 Yêu cầu không hợp lệ. Tôi đang sử dụng VB.NET. Đây là mã:Điểm cuối mã thông báo API Google trả về Yêu cầu Không hợp lệ 400

 'We should now have a "good" one-time authorization code stored in "code" 
    Using Client As New WebClient() 
     'Dim Client As New WebClient() 
     Dim values As New NameValueCollection() 
     Dim Resp 
     Dim responseString As String 

     values("code") = Request.QueryString("code") 
     values("client_id") = ConfigurationManager.AppSettings("google.clientid") 
     values("client_secret") = ConfigurationManager.AppSettings("google.clientsecret") 
     values("grant_type") = "authorization_code" 
     values("redirect_uri") = "http://localhost:3333/MyVacations/default.aspx" 
     Resp = Client.UploadValues("https://www.googleapis.com/oauth2/v3/token", values) 
     responseString = Encoding.Default.GetString(Resp) 
    End Using 

Tôi chắc chắn đây là điểm cuối mà tôi cho là đang sử dụng https://www.googleapis.com/oauth2/v3/token nhưng ai biết? Các Google Discovery Document chỉ muddles này cho tôi.

Cũng tha thứ cho sự ngây thơ của tôi nhưng ai đó sẽ giải thích cách mã POST mà Google sử dụng làm ví dụ liên quan đến Yêu cầu web trong mã của tôi ở trên? Tôi nghĩ rằng tôi hiểu làm thế nào các giá trị dịch, nhưng 3 dòng tiêu đề trong POST (dưới đây) ... làm thế nào điều này được quy định trong mã VB? Tôi đang thiếu một cái gì đó mà phải thực sự rõ ràng cho người khác vì vậy nếu bạn biết, xin vui lòng cho tôi biết.

POST /oauth2/v3/token HTTP/1.1 
Host: www.googleapis.com 
Content-Type: application/x-www-form-urlencoded 

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& 
client_id=8819981768.apps.googleusercontent.com& 
client_secret={client_secret}& 
redirect_uri=https://oauth2-login-demo.appspot.com/code& 
grant_type=authorization_code 

Stack Overflow Post Một nói điều gì đó về việc gửi dữ liệu như tham số truy vấn (sử dụng '&' Tôi đoán) thay vì gửi các dữ liệu như tiêu đề yêu cầu, như vậy là có cái gì đó sai trái với việc gửi cùng một NameValueCollection?

+0

Chuyển hướng_ khớp với giá trị được sử dụng để nhận mã ủy quyền? –

+0

Theo phản hồi được trả về bởi POST, tôi nhận được một uri_redirect_mismatch, vì vậy bạn đang trên. Nhưng tôi đã sao chép và dán URL trực tiếp từ Bảng điều khiển dành cho nhà phát triển vào mã của tôi và ngược lại vì vậy tôi đang thua lỗ vì sao điều này xảy ra. –

Trả lời

4

Vì vậy, đây là câu trả lời: API yêu cầu 2 cuộc gọi. Cuộc gọi đầu tiên trả về mã ủy quyền một lần. Cuộc gọi đầu tiên phải chỉ định URI chuyển hướng.

Cuộc gọi thứ hai gửi mã một lần tới API cho mã thông báo ủy quyền. POST này cũng yêu cầu URI chuyển hướng.

URI chuyển hướng trong cuộc gọi đầu tiên phải giống với URI chuyển hướng trong cuộc gọi thứ 2 !!!

Tôi không thể tìm thấy điều này ở bất kỳ đâu trong tài liệu. Hãy nhớ rằng URI này cũng phải khớp với một trong các URI trong danh sách trong bảng điều khiển dành cho nhà phát triển của bạn, đó là tất cả tài liệu nói.

+0

vâng, sẽ rất tuyệt nếu họ đề cập trong tài liệu. cảm ơn vì đã đăng bài này ... –

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