2014-10-10 21 views
11

Tôi có API yêu cầu xác thực qua OAuth 2.0. Tôi dự đoán ban đầu bằng cách sử dụng HWIOAuthBundle, tuy nhiên từ điều tra, điều này liên quan nhiều hơn đến việc gắn các bên thứ 3 vào cơ chế bảo mật/xác thực của Symfony và không cung cấp cơ chế yêu cầu để xác thực tiêu đề OAuth 2.0 Authorization.Thêm xác thực OAuth 2.0 vào API RESTful

Sau đó tôi tìm thấy một số thông tin về FOSOAuthServerBundle cho phép ứng dụng trở thành nhà cung cấp OAuth 2.0 của chính nó cũng như cung cấp cơ chế bảo mật bắt buộc để xác thực các tiêu đề Authorization. Tuy nhiên, vấn đề là tôi muốn tích hợp nhà cung cấp OAuth 2.0 (máy chủ ủy quyền) trong một ứng dụng bên ngoài (có chứa cơ sở người dùng) và không bao gồm nó trong API. Điều này sẽ cung cấp một số cơ chế để thực hiện xác minh mã thông báo đối với ứng dụng bên ngoài này thông qua API RESTful (khác).

điểm:

  • RESTful API đòi hỏi OAuth xác thực 2.0.
  • Máy chủ ủy quyền OAuth 2.0 được đặt trong một ứng dụng riêng biệt.

Tôi cảm thấy tôi nên sử dụng Implicit cấp và gọi máy chủ ủy quyền trên mỗi yêu cầu để xác thực rằng mã thông báo là chính xác.

là suy nghĩ của tôi có đúng không?

+0

vì vậy Nếu tôi hiểu chính xác, bạn muốn xác thực bằng cách sử dụng bằng chứng xác thực người dùng từ API bên ngoài? – Sehael

+0

Không phải thông tin đăng nhập của người dùng. Thông qua oauth nhưng đó là bên ngoài API. Tất cả các ví dụ tôi đã thấy đã có chúng với nhau – Malachi

+0

Vì vậy, bạn muốn thiết lập FOSOAuthServerBundle trong ứng dụng hiện tại của bạn để ứng dụng bên ngoài có thể sử dụng ứng dụng của bạn để xác thực? – Sehael

Trả lời

3

Rất nhiều công ty lớn như Google, Facebook, vv có một máy chủ ủy quyền riêng biệt từ máy chủ API. Xem luồng ủy quyền OAuth của Google bên dưới Google OAuth Authorization

Bạn cũng có thể kiểm tra chi tiết của Google OAuth Documentation.

Vì vậy, tất cả những gì bạn cần làm là triển khai Nhà cung cấp OAuth để bạn có thể ủy quyền cho nhà cung cấp đó. Có danh sách các thư viện có sẵn trên trang web OAuth: http://oauth.net/code. Bạn có thể xem cụ thể here; có một ví dụ để chạy một Nhà cung cấp dịch vụ OAuth trong Java.

2

oAuth chắc chắn nhất có thể là máy chủ không phải là máy chủ ứng dụng của bạn. Dưới đây là một bức tranh về những gì các chuỗi xác thực sẽ như thế nào:

enter image description here

- Rõ ràng, nếu diễn đàn không thể giải mã hoặc xác nhận được dấu hiệu, diễn đàn này sẽ trả về một mã 401 tình trạng thay vì 200 mã trạng thái.

Miễn là máy chủ oAuth của bạn & diễn đàn chia sẻ cùng một khóa công khai, bạn sẽ ổn với việc chia sẻ oAuth Server & ứng dụng của mình.

Thực tế, hãy xem jwt.io. Dán mã thông báo bạn nhận được từ máy chủ oAuth vào đó. Nó sẽ có thể giải mã mã thông báo ngay lập tức. Sau đó, bạn có thể đặt khóa công khai của mình vào hộp văn bản 'bí mật' để xác minh mã thông báo được xác minh.

ứng dụng của bạn (Forum, trong ví dụ này) sẽ có thể làm tương tự:

1) Lấy token từ tiêu đề ủy quyền được yêu cầu

2) Giải mã token

3) Kiểm tra ngày hết hạn

4) Kiểm tra dấu hiệu sử dụng khóa

5) Quay trở lại mã trạng thái thành công nào của OAuth hay tình trạng thất bại đang

+1

Tôi đã không nhìn vào JWT cho việc thực hiện này nhưng tôi đoán đây là một cái gì đó có thể được xem xét. Cảm ơn! – Malachi

4

Theo như tôi undesratnd yêu cầu của bạn, bạn cần phải xác thực API của bạn thông qua bên ngoài OAuth Authorization Server:

  • Khách hàng cần cung cấp các chứng cứ truy cập lấy ra trong các bước trên cùng với yêu cầu truy cập tài nguyên được bảo vệ. Mã thông báo truy cập sẽ được gửi dưới dạng thông số ủy quyền trong tiêu đề yêu cầu.

  • Máy chủ sẽ xác thực yêu cầu dựa trên mã thông báo.

  • Nếu mã thông báo hợp lệ thì khách hàng sẽ có quyền truy cập vào tài nguyên được bảo vệ nếu không quyền truy cập bị từ chối.

đây là example có thể giúp bạn đạt được yêu cầu của mình. Kiểm tra số document này.

Hoặc đơn giản, bạn có thể làm với Jersey and Oauth

Ngoài ra, bạn có thể kiểm tra Apache Oltu và tìm ra cách để đạt được yêu cầu của bạn.

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