2012-03-06 7 views
12

Tôi đang xây dựng một ứng dụng với cả ứng dụng khách web và ứng dụng khách iPhone.Luồng OAuth, iPhone -> Đường ray -> Facebook

Trên máy khách web, tôi xác thực người dùng thông qua Facebook bằng Omniauth, sau đó người dùng có thể đăng các hành động trên ứng dụng lên Facebook. Điều đó hoạt động tốt.

Tôi gặp sự cố khi triển khai luồng Auth từ ứng dụng iPhone.

Tôi đã thiết lập Trình giữ cửa trong ứng dụng đường ray làm nhà cung cấp OAuth. Mặc dù tôi không chắc chắn cách thực hiện luồng xác thực.

Tôi đã tìm ra điều này: Người dùng có thể đăng nhập vào Facebook trong iPhone và nhận mã thông báo. Ý tưởng là sau đó gửi mã thông báo, cùng với Facebook uid đến ứng dụng đường ray, lưu trữ nó và xác thực người dùng bằng Omniauth. Khi người dùng được xác thực tạo ra một mã thông báo với Doorkeeper và gửi nó trở lại ứng dụng iPhone.

Nếu đây là lần đầu tiên người dùng xác thực dựa vào ứng dụng đường ray, người dùng mới sẽ được tạo.

Sau đó, người dùng có thể thực hiện các tác vụ đối với JSON-api và ứng dụng đường ray sẽ quản lý tích hợp Facebook vì mã thông báo Facebook được lưu trữ trong hồ sơ người dùng.

Ứng dụng cũng sẽ trải rộng trên nhiều miền vì vậy tôi cần phải có nhiều ứng dụng Doorkeeper được đăng ký để cung cấp các cuộc gọi lại khác nhau của uri.

Điều này có vẻ giống như một giải pháp khả thi không? Có an toàn không? Có các luồng/phương pháp thay thế khác không?

Cảm ơn.

+3

tôi đang xem xét các kiến ​​trúc giống nhau, và tôi nghĩ rằng đó là hợp pháp. Trong mô tả của bạn, bạn đang thiếu "đường dẫn xác thực mã thông báo truy cập FB UID + chống lại Facebook" để đảm bảo bạn không bị giả mạo. – Hollownest

+1

Điều này được gọi là "xác nhận" và dường như chính xác những gì bạn mô tả. Từ https://github.com/songkick/oauth2-provider: '' máy khách OAuth sẽ xác thực người dùng bằng một số khung khác và nhận mã thông báo, sau đó trao đổi mã thông báo này cho mã thông báo truy cập trên miền của bạn. '' – Hollownest

+0

Bạn có cuối cùng sử dụng nhà cung cấp oauth2? –

Trả lời

8

Các giải pháp tôi đã đi với được tóm tắt như sau:

  1. Khách hàng bắt đầu dòng chảy thề w (sử dụng nút đăng nhập vv)/Facebook
  2. Khách hàng được auth token và viết lại cho máy chủ
  3. server vẻ up người dùng thông qua FB API cuộc gọi w/token
  4. Máy chủ tra cứu/tạo người dùng dựa trên FB id
  5. Người dùng đăng nhập nếu người dùng có tra cứu liên kết id FB thành công

Tôi có một sơ đồ và chi tiết hơn ở đây: http://www.eggie5.com/57-ios-rails-oauth-flow