Cách tốt nhất để triển khai xác thực cho API REST


21

Chúng tôi phát triển các ứng dụng dựa trên xã hội cho điện thoại di động. Mọi ứng dụng đều sử dụng các dịch vụ web RESTful API. Khi tôi thực hiện đăng nhập, tôi thường lưu tên người dùng và mật khẩu ở đâu đó trên thiết bị. Sau đó, tôi gửi cho họ và như một phản hồi tôi có quyền truy cập vào hồ sơ của tôi. Nhưng tôi cũng biết có một cách khác để làm điều này.

Người ta bằng cách nào đó tạo mã thông báo với một thuật toán cụ thể, sau đó gửi nó thay vì tên người dùng và mật khẩu để có quyền truy cập.

Tôi nên thực hiện điều đó như thế nào? Tôi có nên gửi mã thông báo này cùng với mọi yêu cầu khác ngoài đăng nhập không?


11
Đó là xác thực , không ủy quyền . Xác thực = chứng minh rằng bạn là người bạn nói bạn là. Ủy quyền = chứng minh rằng bạn được phép làm những gì bạn yêu cầu.
tdammers

Tôi chỉ cần thêm bình luận vào câu trả lời! +1 cho bạn @tdammers Tôi đã chỉnh sửa tất cả nội dung để ủy quyền của
Google

Câu trả lời:


14

Có một số cách để triển khai xác thực trong ngữ cảnh RESTful và an toàn hơn khi chỉ gửi mã thông báo thay vì đăng nhập / mật khẩu: bạn có thể dễ dàng làm cho mã thông báo không hợp lệ khi hết thời gian hoặc theo một số tiêu chí khác và yêu cầu người dùng xác thực lại .

Ví dụ xác thực các yêu cầu REST bằng cách sử dụng HMAC . Trong phương pháp này, khách hàng sẽ có khóa công khaibí mật . Đối với tất cả các yêu cầu yêu cầu xác thực , bạn nên thêm khóa publiс và sử dụng khóa bí mật để tính băm yêu cầu của bạn

var myRequest = "https://myserver/resource?publicId=12345&param=value";
var requestHash = hmac_implementation(myRequest);
myRequest = myRequest + '&hmac=' + requestHash;

Bây giờ máy chủ có thể xác định yêu cầu bằng khóa chung và tự tính toán requestHash . Nếu cả hai giá trị băm đều bằng nhau, thì người dùng được ủy quyền.

Btw, bạn cũng phải sử dụng https để bảo mật liên lạc qua mạng máy tính - điều này sẽ giúp giảm thiểu các vấn đề có thể xảy ra.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.