MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách tốt nhất để xác thực và cấp phép một giải pháp web và api như MERN Stack là gì?

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




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ngăn chặn đầu ra từ dịch vụ Codeship

  2. Khung tổng hợp MongoDB $ subtract

  3. Đang cập nhật Mongoose mảng lồng nhau

  4. Nhóm theo sum mongodb

  5. bson.D và bson.M cho các truy vấn tìm kiếm