Chiến lược ủy quyền tốt nhất tùy thuộc vào phạm vi ứng dụng của bạn trong ngắn hạn hay dài hạn.
Web nguyên khối hoặc đơn giản với đăng nhập Riêng tư
Ví dụ:nếu bạn chỉ có một web đơn giản (MERN) với một phần phụ trợ đơn giản (phần còn lại của api) hoặc một ứng dụng nguyên khối như thế này ví dụ về mern với thông tin đăng nhập nội bộ hoặc riêng tư trong tổ chức của bạn, chiến lược ủy quyền của bạn có thể đơn giản như sau:
- (1 *) / login express route nhận người dùng / mật khẩu, xác thực chúng trong cơ sở dữ liệu và trả về mã thông báo clasic jwt và một loạt các tùy chọn (các tuyến phản ứng) mà người dùng nên có quyền truy cập
- ứng dụng web (phản ứng) phải hiển thị các trang có các tuyến đường khớp với các tuyến đường đã nhận
- ứng dụng web phải gửi mã thông báo đã nhận đến bất kỳ lệnh gọi điểm cuối phần còn lại nào của api
- khi api nhận được lệnh gọi từ web phản ứng, phải xác thực sự tồn tại của mã thông báo dưới dạng tiêu đề. Nếu không tồn tại, phải trả về lỗi 403.
- (2 *) Nếu mã thông báo tồn tại, bạn phải cố gắng xác thực mã thông báo đó (hình thức tốt, chưa hết hạn, chữ ký chính xác, v.v.).
- (3 *) Nếu đó là mã thông báo hợp lệ, bạn phải thực hiện xác thực lần cuối:Người dùng có vai trò "khách" có được phép thực hiện
DELETE
không đến một điểm cuối/user/100
. - (4 *) Giải pháp cổ điển là có một số bảng trong cơ sở dữ liệu của bạn như:user, role, user_roles, role_permission, allow_option. Bảng tùy chọn phải đã đăng ký tất cả các điểm cuối api của bạn và phương thức của nó. Ngoài ra, điều này có thể được sử dụng để tạo mối quan hệ giữa các tuyến web của người dùng <:>. Kiểm tra điều này
Yêu cầu hiện đại
Các tổ chức hiện đại và lớn yêu cầu:
- Đăng nhập Mạng xã hội
- Người dùng bên trong / bên ngoài
- Không phải thông tin đăng nhập tương tác (rô bốt, bộ lập lịch, v.v.)
- Một số ứng dụng web
- Một số ứng dụng Di động
- Rất nhiều Api còn lại
Đối với trường hợp này, ứng dụng MERN không phải là một lựa chọn tốt vì là TẤT CẢ TRONG MỘT. Chiến lược phổ biến để thực hiện các yêu cầu trước đó là triển khai một số tạo tác trong một số máy chủ:
- ứng dụng web (phản ứng, vue, góc cạnh, liên kết, v.v.)
- phần còn lại của apis (nodejs + expres, java, python, v.v.)
- xác thực / ủy quyền:nền tảng / nhà cung cấp oauth2, Nền tảng nhận dạng / truy cập, v.v.
Nếu đây là trường hợp của bạn, bạn phải chia ứng dụng MERN của mình thành nhiều phần mềm có thể triển khai:web, api và bảo mật.
Oauth2
Cho dù bạn chỉ lo lắng về việc đăng nhập hay cách đảm bảo xác thực và ủy quyền cho web, apis và có thể là ứng dụng di động của bạn, bạn sẽ cần:OAUTH2
Bạn có thể phát triển nền tảng bảo mật của riêng mình có cân nhắc (1 *), (2 *), (3 *) y (4 *) hoặc sử dụng một cái gì đó như:
- auth0
- keycloack, v.v.
Thêm chi tiết tại đây: https://stackoverflow.com/a/62049409
Câu hỏi của bạn
- bạn nghĩ phương pháp nào tốt hơn?
- Tôi nghĩ nếu bạn sử dụng auth0, bạn sẽ tiết kiệm được thời gian và công sức. Với auth0, bạn chỉ cần một ứng dụng express đơn giản, với một số điểm cuối như / đăng nhập, / gọi lại, v.v. Hoặc nếu bạn sử dụng auth0 + passport.js, các điểm cuối này được quản lý bởi passport.js
- Tôi khuyên bạn, hãy xem lại cách hoạt động của quy trình OAUTH2 trước đây để sử dụng auth0 có / không có hộ chiếu. liên kết này đã giúp tôi rất nhiều.
- Sự khác biệt giữa 2 và 3 là gì,
- Khi tôi đọc, auth0 và các nền tảng khác cung cấp dịch vụ quản lý người dùng hoặc nó có thể kết nối với dịch vụ người dùng của bạn (AD / LDAP, cơ sở dữ liệu, api, v.v.). Vì vậy
- Có cách nào để triển khai các quy tắc trong hộ chiếu (ví dụ:chuyển hướng người dùng mới trong lần đăng nhập đầu tiên)
- Có. Bạn có thể thêm một số logic khi lệnh gọi lại được chuyển hướng trong nodejs của bạn có hoặc không có hộ chiếu.
- Nếu tôi triển khai Passport với MongoDB và cơ sở dữ liệu của tôi có hàng trăm người dùng, làm cách nào để quản lý họ?
- Ngày nay cơ sở dữ liệu hỗ trợ rất nhiều hàng. Vì vậy, đối với cơ sở dữ liệu sản xuất của bạn, hãy cố gắng tối ưu hóa hoặc giám sát nó. Một lựa chọn khác là thuê một quản trị viên cơ sở dữ liệu để thực hiện các tác vụ này.
Tài liệu tham khảo
- https://www.digitalocean.com/ cộng đồng / hướng dẫn / an-giới thiệu-to-oauth-2
- https://auth0.com/user-management
- https://stackoverflow.com/a/62049409
- https://fiware-tutorials.readthedocs. io / en / new / role-permissions / index.html
- https://dba. stackexchange.com/questions/36935/best-relational-database-osystem-for-this-data
- https://www.mind -it.info/2010/01/09/nist-rbac-data-model/
- Quản lý đăng nhập một lần bằng passportjs cho các ứng dụng web của riêng tôi - đăng nhập chia sẻ
- https://aws.amazon.com/blogs/apn/how-to-integrate-rest-apis-with-single-page-apps-and-secure-them -using-auth0-part-1 /
- Bảo mật Facebook OAuth bằng passport-facebook
- Thông tin về Django, Ajax, Jquery không đồng bộ
- mô hình quan hệ