2012-06-27 32 views
5

Tôi đang xây dựng một API REST bằng cách sử dụng Grails. Tôi muốn nó được bảo vệ bằng luồng OAuth2.0 client_credentials (grant_type). use-case của tôi là như sau:Grails: Đảm bảo REST API với OAuth2.0

một tác nhân bên ngoài sẽ gửi một yêu cầu đến một cái gì đó giống như

http://server-url/oauth/token?client_id=clientId&client_secret=clientSecret&grant_type=client_credentials 

và có được một access_token. Sau đó, URL của tôi (tài nguyên được bảo vệ) phải được truy cập bằng một cái gì đó như

http://server-url/resource?access_token={access-token obtained before} 

Tôi đang tìm kiếm thứ gì đó làm việc này trên Grails dễ dàng và nhanh chóng. Điều gì sẽ là cách tốt nhất/công cụ/plugin để sử dụng cho việc này? Thư viện Scribe là một tùy chọn, nếu có bất kỳ hướng dẫn nào cho trường hợp sử dụng cụ thể của tôi, nó sẽ rất tuyệt vời.

P .: Tôi đã thử các trình cắm thêm bảo mật mùa xuân và các plugin liên quan, không có niềm vui ở đó. Bất kỳ lựa chọn thay thế sẽ được tốt đẹp.

+0

Xin lỗi, người ghi chép là client-side chỉ cho thời điểm này. Đang gắn thẻ lại. –

Trả lời

-1

Dựa trên kinh nghiệm của tôi, Scribe được xây dựng cho OAuth 1.0 và chỉ hỗ trợ rất hạn chế cho OAuth 2.0. Thực tế, để thử nghiệm việc triển khai OAuth 2 của chúng ta, tất cả những gì chúng ta có thể sử dụng từ nó là một trình bao bọc yêu cầu HTTP, chúng ta phải làm bất cứ điều gì khác theo cách thủ công. May mắn thay, làm điều đó bằng tay là đáng ngạc nhiên dễ dàng.

Vì tôi vẫn chưa tìm thấy thư viện OAuth 2.0 mở tốt cho Java (thật ra tôi không quen với Groovy), tôi khuyến khích bạn viết mã máy khách cho chính mình. Bạn thậm chí không cần một điểm cuối gọi lại của khách hàng để sử dụng dòng ủy nhiệm khách hàng cấp luồng. Vì vậy, bạn chỉ cần tạo một yêu cầu HTTP (như bạn đã viết ở trên, hãy cẩn thận để thoát khỏi các tham số GET) và nhận nội dung phản hồi. Luồng của bạn không sử dụng chuyển hướng, do đó, chỉ cần phân tích cú pháp đối tượng JSON trong nội dung phản hồi, ví dụ: với thư viện org.json. Cuối cùng, gửi yêu cầu HTTP bằng cách sử dụng mã thông báo truy cập được trích xuất.

Lưu ý rằng các ví dụ của bạn không tuân thủ tiêu chuẩn hoàn toàn. Tiêu chuẩn yêu cầu sử dụng HTTPS, gửi mã thông báo trong tiêu đề HTTP thay vì tham số GET và đề xuất sử dụng tiêu đề ủy quyền cơ bản HTTP thay cho tham số GET để chỉ định thông tin xác thực ứng dụng khách.

Tôi có thể đã hiểu sai câu hỏi của bạn và bạn cũng có thể muốn triển khai phía máy chủ. Thư viện scribe chỉ hỗ trợ phía máy khách, vì vậy bạn có thể tìm thấy triển khai thương mại hoặc triển khai máy chủ của riêng bạn. Nó là một nhiệm vụ phức tạp, nhưng nếu bạn chỉ hỗ trợ luồng thông tin khách hàng, nó gần như trở nên dễ dàng. ;-)

+0

Cảm ơn bạn đã nhập. Nhưng, tôi quan tâm đến việc thực hiện phía máy chủ.Tôi đã rất do dự để thực hiện nó từ đầu như tôi không phải là một chuyên gia bảo mật OAuth và không muốn để lại bất kỳ sai sót bảo mật: P. Để chính xác, tôi đang tìm thứ gì đó có thể giúp tôi lưu trữ/quản lý mã thông báo truy cập được tạo ra [tự động vô hiệu hóa chúng sau thời gian hết hạn] vv. Tất nhiên, người ta có thể làm điều đó từ đầu nhưng nó có thể để lại một số khoảng trống. Có bất cứ điều gì như thế này tồn tại cho Java, cung cấp một giao diện dễ dàng để tạo ra, lưu trữ mã thông báo, vv ở phía máy chủ? – SoftDev

+0

Tôi không biết thư viện như vậy, nhưng lưu trữ mã thông báo là phần dễ nhất để thực hiện như một plugin có giao diện rõ ràng (một cửa hàng, tải và thu hồi hoạt động là tất cả những gì bạn cần). Bạn nên quan tâm nhiều hơn về các chi tiết bảo mật thực hiện thông tin đăng nhập của khách hàng cấp luồng và lưu trữ các quyền được xác định trước cho các thông tin đăng nhập ứng dụng khách. –

2

Tôi gặp vấn đề tương tự. Tôi đã tìm thấy rất nhiều plugin bổ sung giúp bạn xác thực ứng dụng của mình với các nhà cung cấp oauth khác, nhưng không có gì có thể giúp tôi làm cho ứng dụng của tôi trở thành nhà cung cấp oauth. Sau nhiều lần đào bới, tôi bắt gặp plugin grails này sẽ thực hiện chính xác những gì bạn muốn.

https://github.com/adaptivecomputing/grails-spring-security-oauth2-provider

Tôi vẫn đang cấu hình nó cho các ứng dụng của tôi, và tôi nghĩ rằng các tài liệu có thể cần một vài chỉnh sửa (đặc biệt là dòng chảy authorization_code) nhưng tôi có client_credentials đơn giản chảy để làm việc với cấu hình tối thiểu. Hy vọng rằng sẽ giúp!

+0

Plugin đó thực sự thiếu về tài liệu và là loại bị bỏ rơi. Tôi đã kết thúc bằng cách sử dụng Spring Roo thay vì Grails vì điều này. Có một plugin rất hay cho Roo, và vì Roo chỉ là một sự đóng gói lại của vanilla Spring MVC, bạn sẽ nhận được nhiều tài liệu chính thức hơn. Dù bằng cách nào nếu Grails không phải là yêu cầu, các sản phẩm gia đình SpringSource khác (chẳng hạn như Spring MVC hoặc Roo) có thể làm tốt hơn cho việc triển khai OAuth. Đây chỉ là một mẹo cho bất cứ ai quan tâm. Nó không phải là một câu trả lời và vì vậy tôi để nó ở đây trong các bình luận. – petersaints