Tôi có một trang web sử dụng bảo mật Spring và có người dùng (tên người dùng & mật khẩu) và xác thực biểu mẫu chuẩn. Tôi cho phép người dùng tạo Id ứng dụng khách và bí mật ứng dụng khách được liên kết với tài khoản của họ để sử dụng với API phần còn lại được bảo đảm OAuth2.Bảo mật mùa xuân oauth2 - nhận dữ liệu tùy chỉnh từ mã OAuth2 chính
tôi sử dụng một id khách hàng bí mật & khách hàng riêng biệt cho các API và không username và mật khẩu vì vậy người dùng có thể thay đổi mật khẩu của họ vv mà không vi phạm các chứng chỉ API, thiết lập phạm vi cụ thể, vô hiệu hóa truy cập API, vv
tôi sử dụng spring-security-oauth2 (nhà cung cấp) để bảo mật API còn lại và tôi đã cho phép luồng thông tin khách hàng. Tôi đã thiết lập xác thực máy khách cho api để id khách hàng và bí mật được kiểm tra.
Từ một ứng dụng riêng biệt, tôi sử dụng id ứng dụng khách và bí mật của khách hàng để truy xuất mã thông báo truy cập và bắt đầu sử dụng nó với api. Đối với hầu hết các phần, tôi sử dụng các biểu thức @PreAuthorize đơn giản thường dựa trên vai trò và phạm vi ứng dụng khách và chúng xuất hiện để hoạt động chính xác.
Tất cả ở trên xuất hiện để làm việc tốt
Tuy nhiên ... Tôi có một vài điểm cuối API Tuy nhiên bây giờ mà tôi cần phải thực hiện một số quy định phức tạp hơn dựa trên một số chi tiết từ người dùng cơ bản - trong trường hợp này người dùng đã tạo id khách hàng và bí mật.
Ví dụ đơn giản xem xét ứng dụng nhắn tin nơi tôi có điểm cuối cho phép người dùng đăng "thông điệp" mới của một loại cụ thể có thể thay đổi. Tôi có một bảng người nhận được phép cho mỗi người dùng và mỗi loại và tôi muốn kiểm tra xem người nhận tin nhắn đã đăng có khớp với người nhận được phép đối với loại đó không. (Dữ liệu người nhận được cho phép thường không lớn và hiếm khi thay đổi, vì vậy tôi rất vui khi lưu trữ bản sao của nó khi tạo mã thông báo truy cập)
Tôi nhận được hiệu trưởng tại các điểm cuối này và tôi thấy nó là một trường hợp của OAuth2Authentication có chứa:
- userAuthentication - null - Điều này có vẻ mong đợi đối với luồng thông tin khách hàng.
- clientAuthentication là dân cư và authorizationParameters chứa các loại trợ cấp và client_id
Tôi cho rằng tôi có thể sử dụng id khách hàng từ clientAuthentication.authorizationParameters để tra cứu người sử dụng và các chi tiết tôi cần, nhưng đó sẽ là một vài truy vấn mỗi api gọi mà dường như không có ý nghĩa. Tôi có thể có một địa điểm/cách tốt trong thư viện Spring OAuth2 trong khi cấp mã thông báo truy cập để tôi có thể thêm một số chi tiết bổ sung để sau này tôi có thể lấy chúng từ đối tượng OAuth2Authentication (chính) (hoặc cái gì đó mở rộng nó). ?)
Ngoài ra, có cách tiếp cận tốt hơn hoàn toàn cho vấn đề đó không?
Thx!
Bạn đã nhìn JWT (JSON web token)? Đó là khá nhiều mã thông báo có tất cả thông tin hữu ích trong đó. – kaqqao