Tôi vẫn đang cố gắng tìm giải pháp bảo mật tốt nhất để bảo vệ API REST, vì số lượng ứng dụng di động và API đang tăng lên mỗi ngày.
Tôi đã thử nhiều cách xác thực khác nhau, nhưng vẫn có một số hiểu lầm, vì vậy tôi cần lời khuyên của một người có kinh nghiệm hơn.
Hãy để tôi nói, làm thế nào tôi hiểu tất cả những thứ này. Nếu tôi hiểu điều gì đó không chính xác, xin vui lòng cho tôi biết.
Theo như API REST không trạng thái cũng như WEB nói chung, chúng tôi cần gửi một số dữ liệu xác thực trong mỗi yêu cầu (cookie, mã thông báo ....). Tôi biết ba cơ chế được sử dụng rộng rãi để xác thực người dùng
Mã thông báo với HTTPS. Tôi đã sử dụng phương pháp này rất nhiều lần, nó đủ tốt với HTTPS. Nếu người dùng cung cấp mật khẩu và đăng nhập chính xác, anh ta sẽ nhận được mã thông báo để phản hồi và sẽ sử dụng nó cho các yêu cầu tiếp theo. Mã thông báo được tạo bởi máy chủ và được lưu trữ, ví dụ trong bảng riêng biệt hoặc giống với nơi lưu trữ thông tin người dùng. Vì vậy, đối với mỗi máy chủ yêu cầu kiểm tra xem người dùng có mã thông báo hay không và nó giống như trong cơ sở dữ liệu. Mọi thứ đều khá đơn giản.
Mã thông báo JWT. Mã thông báo này là tự mô tả, nó chứa tất cả thông tin cần thiết về chính mã thông báo, người dùng không thể thay đổi ví dụ ngày hết hạn hoặc bất kỳ khiếu nại nào khác, bởi vì mã thông báo này được tạo bởi máy chủ với từ khóa bí mật. Điều này cũng rõ ràng. Nhưng một vấn đề lớn, cá nhân đối với tôi, làm thế nào để vô hiệu hóa mã thông báo.
OAuth 2. Tôi không hiểu tại sao nên sử dụng phương pháp này khi giao tiếp được thiết lập trực tiếp giữa máy chủ và máy khách. Theo tôi hiểu, máy chủ OAuth được sử dụng để phát hành mã thông báo với phạm vi hạn chế để cho phép các ứng dụng khác truy cập thông tin người dùng mà không lưu trữ mật khẩu và đăng nhập. Đây là giải pháp tuyệt vời cho các mạng xã hội, khi người dùng muốn đăng ký trên một số trang, máy chủ có thể yêu cầu quyền để lấy thông tin người dùng, ví dụ từ twitter hoặc facebook, và điền vào các trường đăng ký với dữ liệu người dùng, v.v.
Xem xét khách hàng di động cho cửa hàng trực tuyến.
Câu hỏi đầu tiên tôi có nên thích JWT hơn mã thông báo loại đầu tiên không? Theo như tôi cần người dùng đăng nhập / đăng xuất trên máy khách di động, tôi cần lưu trữ mã thông báo ở đâu đó hoặc trong trường hợp JWT, mã thông báo sẽ bị vô hiệu khi đăng xuất. Các cách tiếp cận khác nhau được sử dụng để vô hiệu hóa mã thông báo, một trong số đó là tạo danh sách mã thông báo không hợp lệ (danh sách đen). Hừm. Bảng / tệp sẽ có kích thước lớn hơn nhiều so với nếu mã thông báo được lưu trữ trong bảng và được liên kết với người dùng và chỉ bị xóa khi đăng xuất.
Vậy lợi ích của mã thông báo JWT là gì?
Câu hỏi thứ hai về OAuth, tôi có nên sử dụng nó trong trường hợp liên lạc trực tiếp với máy chủ của mình không? Mục đích của một lớp nữa giữa máy khách và máy chủ chỉ để phát hành mã thông báo, nhưng giao tiếp sẽ không phải với máy chủ oauth mà với máy chủ chính. Theo tôi hiểu, máy chủ OAuth chỉ chịu trách nhiệm cấp quyền cho ứng dụng của bên thứ ba (mã thông báo) để truy cập thông tin cá nhân của người dùng. Nhưng ứng dụng khách trên thiết bị di động của tôi không phải là bên thứ ba.