2013-01-15 30 views
5

Tôi đang sử dụng Scribe (OAuth1.0) làm cơ chế để người dùng có thể sử dụng tài khoản Twitter của họ để xác thực với ứng dụng GWT/GAE của tôi.Twitter không nhớ ủy quyền

Theo https://dev.twitter.com/docs/auth/implementing-sign-twitter, có 3 trường hợp có thể xảy ra: a/Người dùng được Đăng nhập và chấp thuận. Trong trường hợp này, Twitter nên chuyển hướng người dùng một cách rõ ràng trở lại url ứng dụng của tôi, b/người dùng đã đăng nhập nhưng không được ủy quyền hoặc c/người dùng không được đăng nhập

Khi Twitter quay lại ứng dụng của tôi (gọi lại), Tôi sử dụng tham số xác minh để đọc dữ liệu người dùng từ twitter, mà tôi sử dụng để xác định người dùng trong ứng dụng của mình.

Tất cả điều này hoạt động tốt ngoại trừ các trường hợp sau:

Trường hợp a/không hoạt động đối với tôi. Mặc dù người dùng đã ủy quyền cho ứng dụng của tôi đọc dữ liệu người dùng của mình, dường như Twitter không nhớ điều này và yêu cầu lại quyền cấp quyền truy cập. (kịch bản b /).

+0

tôi có thể có một giải pháp: Tôi có thể sử dụng các thông số gọi lại để xây dựng access token và lưu trữ này trong một cookie. Tôi nghĩ mã thông báo truy cập là vĩnh viễn. Khi sau đó, người dùng cố gắng đăng nhập bằng Twitter, ứng dụng sẽ sử dụng mã thông báo truy cập từ cookie. – peternees

Trả lời

9

Có hai URL twitter cung cấp cho các ứng dụng yêu cầu mã thông báo OAuth: /oauth/authenticate/oauth/authorize. Khi một ứng dụng hướng người dùng đến số ủy quyền cho điểm cuối - Twitter sẽ yêu cầu người dùng cấp quyền cho ứng dụng MỌI lần họ đăng nhập. xác thực điểm cuối sẽ yêu cầu ủy quyền một lần và sau đó bất kỳ lần đăng nhập tiếp theo nào vào Twitter sẽ liên tục chuyển tiếp tới cuộc gọi lại ứng dụng. Điều này thường được gọi là "đăng nhập bằng tài khoản Twitter của bạn".

Trong Scribe, mặc định là phép - để thay đổi điều này để xác thực bạn cần 2 điều:

  1. Đảm bảo Cho phép ứng dụng này được sử dụng để Đăng nhập với Twitter thiết lập được kiểm tra trong trang cài đặt ứng dụng Twitter của bạn.
  2. Trong ứng dụng của bạn - khi bạn chỉ định lớp Scribe API để sử dụng - thay vì sử dụng org.scribe.builder.api.TwitterApi.class thay đổi này để org.scribe.builder.api.TwitterApi.Authenticate.class

Bây giờ ứng dụng của bạn sẽ chuyển hướng người dùng đăng nhập vào các /oauth/authenticate endpoint, và nếu họ có ủy quyền cho ứng dụng của bạn ít nhất một lần, họ sẽ chỉ được thông qua.

Edit: bổ sung tài liệu - https://dev.twitter.com/docs/api/1.1#102

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