2016-05-04 21 views
5

Tôi có máy chủ dựa trên Jersey mà tôi muốn bảo mật với OAuth 2.0. Có hai đường dẫn mà tôi đã thấy phổ biến:Thêm máy chủ RESTful Oauth 2.0 đến Jersey dựa trên Jersey

  • Oltu - Tương thích với Jersey và dường như được hỗ trợ, mặc dù không phải cũng như Bảo mật mùa xuân. This 2012 question dường như đề xuất đây là con đường để đi, nhưng tôi muốn xác nhận về một bối cảnh năm 2016 vì vậy tôi sẽ không thực hiện một cái gì đó không được hỗ trợ nữa.
  • Spring Security - Dường như nó rất phổ biến, nhưng đường dẫn này ngụ ý thay đổi máy chủ thành một MVC dựa trên Spring. Tôi không biết nếu đó là một cái gì đó được đề nghị dựa trên những lợi ích của việc sử dụng một cái gì đó như được hỗ trợ rộng rãi như Spring và chi phí của refactoring.

Với sự hỗ trợ tôi có nghĩa là một dự án phát triển liên tục, cộng đồng được thiết lập tốt với hướng dẫn, tài liệu và một số thư viện cho khách hàng (web, di động, máy chủ) đã có sẵn.

Tùy chọn nào mạnh hơn? Có tùy chọn hoặc tùy chọn khác không?

Trong mọi trường hợp. Có tài liệu tham khảo hay hướng dẫn tốt để bắt đầu triển khai điều này không?


CẬP NHẬT

Sau vài giờ đọc và hiểu biết về cả hai nhà cung cấp OAuth tôi đã đề cập, tôi cảm thấy Apache Oltu của documentation không hướng dẫn cho tôi nhiều như có thành phần chính mà không phải là tài liệu tuy nhiên, nhưng example đã cho tôi hình ảnh tốt hơn về cách thực hiện Oltu. Mặt khác, đi qua Spring Security's material Tôi đã biết rằng nó vẫn có thể được xây dựng trên một dự án java không dựa trên MVC của Spring. Nhưng có một sự tiếp xúc giới hạn các triển khai/hướng dẫn về Spring Security trên một dự án không dựa trên Spring.

cách tiếp cận khác:

tôi đã đưa ra một kiến ​​trúc mà có thể ổn định hơn và sẽ không quan tâm đến những chi tiết thực hiện của máy chủ bên trong (một trong những đã thực hiện sử dụng Jersey). Có một máy chủ được dành riêng cho mục đích bảo mật (ủy quyền, xác thực, lưu trữ thẻ trong cơ sở dữ liệu riêng của nó, vv) ở giữa hoạt động như một cổng vào giữa thế giới bên ngoài và máy chủ bên trong. Về cơ bản nó hoạt động một relay và định tuyến các cuộc gọi, qua lại và đảm bảo rằng máy khách không biết gì về máy chủ bên trong và cả hai thực thể chỉ giao tiếp với máy chủ bảo mật. Tôi cảm thấy đây sẽ là con đường để tiến lên phía trước như

  1. Thay thế bằng một nhà cung cấp bảo mật khác có nghĩa là cắm máy chủ bảo mật và thêm mới.
  2. Máy chủ bảo mật không quan tâm đến việc triển khai máy chủ bên trong và các cuộc gọi vẫn sẽ tuân thủ các tiêu chuẩn RESTful.

Tôi đánh giá cao đề xuất hoặc phản hồi của bạn về phương pháp này.

Trả lời

0

Tôi nghĩ, việc sử dụng các đầu nối oauth được triển khai bên trong chính nó càng đơn giản! Bạn đã cân nhắc việc sử dụng máy chủ/máy khách của OAuth riêng (đã được liên kết bên trong) không? https://jersey.github.io/documentation/latest/security.html#d0e12970

Hãy xem để:

16.3.2. Hỗ trợ OAuth 2

hy vọng sẽ được trợ giúp. :)

+3

Hỗ trợ OAuth 2 của Jersey chỉ ở phía máy khách. –

+0

Takahiko Kawasaki, tôi đã đọc lại câu hỏi, tôi không nghĩ rằng vardhinisuresh27 muốn thực hiện là cơ chế nội bộ oauth riêng. Tại sao không sử dụng cái đã phát triển và cung cấp? – jeorfevre

+0

Nếu vardhinisuresh27 muốn triển khai OAuth 2.0 _client_, hỗ trợ OAuth 2.0 của Jersey có thể được sử dụng. Mặt khác, nếu anh ta muốn một OAuth 2.0 _server_, tôi phải chỉ ra rằng Jersey không hỗ trợ kịch bản. Vì anh ta đã đề cập đến Oltu và Spring Security, cả hai đều là các giải pháp OAuth 2.0 _server_, tôi nghĩ anh ấy muốn triển khai một máy chủ OAuth 2.0. –

1

Apache Oltu hỗ trợ OpenID Connect nhưng kiến ​​trúc của nó không tốt. Ví dụ: OpenIdConnectResponse không được là hậu duệ của OAuthAccessTokenResponse vì phản hồi OpenID Connect không phải lúc nào cũng chứa mã thông báo truy cập. Ngoài ra, thư viện có chứa một lớp GitHub, GitHubTokenResponse.

Bảo mật mùa xuân nổi tiếng, nhưng tôi e rằng nó sẽ không bao giờ có thể hỗ trợ OpenID Connect. Xem Issue 619 về rào cản lớn đối với hỗ trợ OpenID Connect.

java-oauth-serverjava-resource-server là những ví dụ tốt của Jersey + OAuth 2.0, nhưng họ sử dụng một dịch vụ phụ trợ thương mại, Authlete. (Tôi là tác giả của họ.)

OpenAM, MITREid Connect, Gluu, Connect2id, và khác OAuth 2.0 + OpenID Connect giải pháp được liệt kê trong Libraries, Products, and Tools trang của OpenID Foundation.


CẬP NHẬT cho bản cập nhật của câu hỏi

RFC 6749 (Các OAuth 2.0 Authorization Framework) để phân biệt một máy chủ uỷ quyền từ một máy chủ nguồn. Tóm lại, máy chủ ủy quyền là máy chủ phát hành mã thông báo truy cập và máy chủ tài nguyên là máy chủ phản hồi các yêu cầu đi kèm với mã thông báo truy cập.

Đối với máy chủ tài nguyên, Cổng API là một trong các mẫu thiết kế gần đây. Amazon, CA Technologies, IBM, Oracle và các công ty khác cung cấp giải pháp API Gateway. Kiến trúc Cổng API có thể gần với ý tưởng của bạn. Một số giải pháp API Gateway xác minh mã thông báo truy cập theo cách riêng của chúng (vì giải pháp tự cấp mã thông báo truy cập) và các giải pháp khác chỉ ủy quyền xác minh mã thông báo truy cập cho máy chủ bên ngoài (vì giải pháp không có cơ chế cấp mã thông báo truy cập). Ví dụ: Amazon API Gateway là ví dụ cho phép xác minh mã thông báo truy cập vào máy chủ bên ngoài mà Amazon đã đặt tên là trình ủy quyền tùy chỉnh. Xem phần sau để biết thêm thông tin về trình ủy quyền tùy chỉnh.

Nếu một máy chủ uỷ quyền cung cấp một API mẫn (như RFC 7662) mà bạn có thể sử dụng thông tin truy vấn về mã thông báo truy cập, việc triển khai máy chủ tài nguyên của bạn có thể thay thế (plug-out và thêm) máy chủ ủy quyền để tham khảo tương đối dễ dàng.

Đối với máy chủ lưu trữ dữ liệu, các giải pháp kiểu cổng rất hiếm. Đó là bởi vì một giải pháp như vậy phải trưng ra tất cả các chức năng cần thiết để thực hiện một máy chủ ủy quyền như là các API Web. Authlete là một giải pháp như vậy nhưng tôi không biết người khác.

+0

@ vardhinisuresh27 Tôi đã cập nhật câu trả lời cho câu hỏi bổ sung của bạn. –

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