2011-01-02 21 views
8

Quá trình OAuth là:Xác định id người dùng trong oauth callback

  1. Đối xác thực OAuth, ứng dụng (aka OAuth khách hàng) chuyển hướng người dùng đến authorize_url

  2. này chuyển hướng người dùng đến OAuth máy chủ web của máy chủ, nơi người dùng cấp quyền truy cập ứng dụng web vào tài khoản của mình

  3. OAuth chuyển hướng người dùng đến url gọi lại được cung cấp bởi ứng dụng (a.k.a oauth client). Tại thời điểm này, cuộc gọi lại đến từ máy chủ OAuth và do đó không có id phiên hoặc phiên băm. Làm cách nào để ứng dụng xác định người dùng đang gọi lại cuộc gọi post-oauth nào?

tôi mặc dù cách làm việc này là:

  1. Khi bạn chuyển hướng người dùng đến authorize_url bạn nối thêm một số tham số cho các chuỗi truy vấn ?id=xxx

  2. Khi máy chủ OAuth chuyển hướng đến callback_url được cung cấp bởi máy khách , một trong các tham số có thông báo HTTP sẽ là tham số được nối thêm vào chuỗi truy vấn trong st ep 1.

Tuy nhiên, điều này dường như không hoạt động đối với máy chủ OAuth mà tôi đang cố gắng kết nối.

Mọi đề xuất?

Trả lời

1

Ý của bạn là gì bởi "tính năng này không hoạt động"?

Máy chủ không gửi lại phần truy vấn? Bạn phải mã hóa trạng thái trong url gọi lại mà bạn cung cấp cho máy chủ oauth. Điều này có thể được thực hiện trong truy vấn hoặc trong phần đường dẫn. Tôi không thấy lý do tại sao điều này không hoạt động?

Có thể bạn cho rằng bạn có một cuộc gọi lại chung, duy nhất được tự động mở rộng với trạng thái? Như xa là một biết đây không phải là trường hợp.

EDIT

Tôi đọc lại các tài liệu tại thực hiện của Google:

You can specify a value for oauth_callback in an OAuthGetRequestToken request, 
to determine where Google redirects the user after they authorize your access 
request. The callback URL can include query parameters. The redirect will include 
the same query parameters, as well as the authorized request token, which your 
application must be able to parse. 

For example, when supporting multiple languages, you can include 
a query parameter that identifies the version of the application that a user is 
viewing. An oauth_callback value of "http://www.yoursite.com/Retrievetoken?Lang=de" 
would result in the redirect 
"http://www.yoursite.com/Retrievetoken?Lang=de&oauth_token=DQAADKEDE". 
Parsing the token and the language parameter ensures that the user is 
redirected back to the correct version of the site. 

SO (không phù hợp với tuyên bố của tôi ở trên) server OAuth tích cực gắn thêm thông tin (& oauth_token = kkk) để URL của bạn. Mã thông báo phải giống như bạn nhận được từ kết quả từ "OAuthGetRequestTOken". Điều này không phù hợp với bạn?

Theo như tôi hiểu tại máy chủ theo nghĩa đen nên sao chép tất cả những gì bạn có trong callback_url thêm thẻ bạn nhận được từ các cuộc gọi dịch vụ

Bạn có một bản ghi về những gì chính xác máy chủ OAuth của bạn cuộc gọi? Nhà cung cấp dịch vụ là ai? Tôi không thể tưởng tượng rằng anh ấy thiếu tính năng này ...

+0

lol .... "điều này không hoạt động" là mơ hồ :) – aiyer

+0

Tôi không lấy lại tham số i gắn thêm vào authorize_url. – aiyer

+0

Trong thư trả lời của bạn, bạn đã tuyên bố rằng tôi nên mã hóa trạng thái trong callback_url. Vì vậy, tôi nối thêm phần sau vào callback_url: request_token = consumer.get_request_token (: oauth_callback => MY_CALLBACK + "? Id = xxx") Tuy nhiên, khi url gọi lại được gọi bởi máy chủ oauth, tôi không nhận được "id "như một tham số. Tôi đang làm gì sai, hoặc máy chủ Oauth có được triển khai không chính xác không? – aiyer

4

Sau khi người dùng đã xác minh mã thông báo yêu cầu của bạn (bằng cách nhập tên người dùng và mật khẩu), bạn sẽ nhận được thông số oauth_token và oauth_verifier được gửi lại, được thêm vào gọi lại.

Nếu điều này có hiệu quả, nhưng các thông số khác bạn chỉ định trong gọi lại KHÔNG được bao gồm trong gọi lại, thì có thể trường hợp nhà cung cấp đơn giản là bỏ qua oauth_callback bạn đang gửi trong bước mã thông báo yêu cầu.

Nếu trường hợp này xảy ra, nhà cung cấp sẽ tham chiếu đến cuộc gọi lại được xác định trước, thường là nhà cung cấp mà bạn đã chỉ định khi nhận khóa và bí mật của người tiêu dùng.

Nhà cung cấp OAuth được phép bỏ qua các cuộc gọi lại được gửi trong luồng ủy quyền (ngoại trừ mục đích ký). Một số nhà cung cấp làm điều này để thêm một lớp bảo mật bổ sung.

0

Tôi không thể thấy lý do bạn muốn gửi ID từ Nhà cung cấp OAuth đến Người tiêu dùng OAuth. Bạn có thể giải thích thêm một chút lý do tại sao bạn cần phải làm điều này?

Nếu bạn có cookie phiên được liên kết với người dùng, bạn sẽ biết người dùng nào sẽ quay lại với bạn (sau khi chuyển hướng), vì bạn có thể có phiên với anh ấy - anh ấy sẽ được chuyển hướng qua trình duyệt và trả lại cookie của bạn.

Ngay cả khi OAuthProvider gửi cho bạn id người dùng nội bộ (điều này không cần thiết và tôi không nghĩ), bạn sẽ làm gì với nó - nó sẽ không khớp với id người dùng trang web nội bộ của bạn, người dùng hoàn toàn khác -ID cho các trang web cung cấp dịch vụ ... hoặc có lẽ tôi không thể nhận được câu hỏi của bạn rất tốt ....

Trân trọng

+0

Tôi nghĩ rằng vấn đề là các tham số được gửi cùng với tham số oauth_callback sẽ bị bỏ qua. Tôi có thể sai mặc dù ... –

+0

Tôi nghĩ rằng điểm thứ 3 của mình là không đúng - ông giả định rằng sau khi máy chủ chuyển hướng người dùng trở lại (để url callback), người dùng sẽ không có cookie phiên với anh ta, và đó là lý do tại sao ông nghĩ rằng anh ta nên đã gửi một id phiên ở nơi đầu tiên và sau đó mong đợi để nhận được nó trở lại. Tuy nhiên tôi nghĩ rằng không có điểm trong này, bởi vì người dùng sẽ được chuyển hướng đến url gọi lại thông qua trình duyệt của mình và do đó ông sẽ có một phiên (mà người tiêu dùng đã thiết lập trước đó). Đó là lý do tại sao tôi nghĩ rằng giả định của mình là không chính xác, hoặc tôi chỉ không thể có được nó ... – middlehut

+0

Lyuben bạn là chính xác; Tôi đã có cùng một vấn đề. Tôi đã không nhận ra rằng chuyển hướng xảy ra từ trình duyệt của họ. – Seth

1

bạn có thể sử dụng tham số nhà nước cho rằng, cũng là máy chủ auth phải cung cấp dịch vụ chi tiết người dùng chỉ dựa trên mã thông báo truy cập.

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