2013-08-05 65 views
9

Tôi đang chuyển ứng dụng web phía máy chủ sang ứng dụng JavaScript một trang bằng API RESTful. Hiện tại. người dùng có thể xác thực bằng Facebook, Twitter, Google, v.v. hoặc qua email và mật khẩu. Làm cách nào để cho phép các hình thức xác thực giống nhau chạy trên API RESTful? Tôi đoán nó trông giống như thế này:Xác thực người dùng API bằng cách sử dụng nhà cung cấp Oauth bên thứ ba

  1. Xác thực với nhà cung cấp ở phía khách hàng.
  2. Lấy nội dung từ phản hồi Oauth và chuyển nó tới API trên máy chủ của tôi để đổi lấy mã thông báo truy cập.
  3. Sử dụng xác thực dựa trên mã thông báo cho các cuộc gọi API tiếp theo.

Tôi có đi đúng hướng không? Nếu vậy:

  1. Có thư viện JS xử lý nhiều nhà cung cấp hay mỗi người sẽ yêu cầu bao gồm một số thứ như JS SDK của Facebook không?
  2. API của tôi trông như thế nào tạo ra mã thông báo? Cụ thể, tôi cần gì từ nhà cung cấp Oauth và làm cách nào để xác minh nó trên máy chủ?

Trả lời

2

Nó sẽ được dễ dàng hơn để bạn có thể xử lý các quá trình xác thực chống lại các nhà cung cấp nhận dạng trên phía máy chủ và không về phía khách hàng. Vì vậy, máy chủ REST của bạn nên hỗ trợ phương thức xác thực riêng của nó (có thể cũng dựa trên OAuth) và chuyển giao nó cho nhà cung cấp bên thứ ba. Vì vậy, một dòng chảy sẽ giống như thế này:

  1. Tiến hành một quá trình đăng nhập từ máy khách (JS) - gọi endpoint REST của auth của bạn, xác định mạng mà bạn muốn đăng nhập vào (ví dụ myserver.com/login?provider = facebook).

  2. Xử lý quy trình đăng nhập ở phía máy chủ - chuyển hướng đến điểm cuối đăng nhập của nhà cung cấp, nhận cuộc gọi lại đăng nhập, xử lý phản hồi (nhận mã thông báo phiên facebook, v.v.).

  3. Phát hành phiên người dùng của riêng bạn (hoặc mã thông báo nếu bạn đang thực hiện OAuth) và trả lời lại ứng dụng khách JS của bạn.

Có một vài thư viện đăng nhập xã hội có thể giúp bạn, hãy kiểm tra http://hybridauth.sourceforge.net/ cho PHP hoặc http://code.google.com/p/socialauth/ cho Java.

Ngoài ra còn có một vài giải pháp thương mại có thể làm cho cuộc sống của bạn dễ dàng hơn nhiều (tôi đang làm việc cho Gigya vì vậy tôi thiên vị), nhưng đó chỉ là nếu bạn có ngân sách.

+0

Cảm ơn, điều này có ý nghĩa từ góc độ kỹ thuật. Tôi đã suy nghĩ từ một góc UX, hy vọng có một số cách để ở trong ứng dụng đơn trang của tôi mà không cần chuyển hướng. Có vẻ như điều đó có thể xảy ra với Facebook bằng cách sử dụng JS SDK của họ, nhưng có lẽ không nói chung hơn. –

+0

Bạn có thể tránh chuyển hướng từ trang của mình bằng cách mở cửa sổ bật lên.Bạn không cần phải chuyển hướng đến điểm cuối REST đăng nhập của bạn từ trang đơn, bạn có thể mở cửa sổ bật lên đến điểm cuối đó và chuyển hướng đến IDP (như facebook) sẽ được thực hiện trong cửa sổ bật lên đó. Khi kết thúc quá trình đăng nhập, bạn phải báo hiệu từ cửa sổ bật lên đến JS trên trang chính của bạn bằng phản hồi và phiên đăng nhập. –

+0

Hoàn hảo! Vì tôi chỉ làm việc trong một cửa sổ duy nhất, tôi đã không nghĩ đến việc liên lạc giữa cửa sổ bật lên và trang. –

6

Tôi khuyên bạn nên tạo khóa truy cập API hoặc sử dụng luồng OAuth riêng biệt dành riêng cho API của bạn. Về mặt khái niệm, bạn sẽ muốn tách riêng hành vi tạo tài khoản với dịch vụ của mình và kết nối các tài khoản từ xa. Bạn có lẽ có thể rút ra những gì bạn đang mô tả, nhưng nó sẽ gây nhầm lẫn.

Đối với làm OAuth dễ dàng hơn trên máy tính, kiểm tra oauth.io