Tôi đang phát triển API REST yêu cầu xác thực. Bởi vì bản thân xác thực xảy ra thông qua một dịch vụ web bên ngoài qua HTTP, tôi đã lý luận rằng chúng tôi sẽ phân phát các thẻ để tránh lặp đi lặp lại việc gọi dịch vụ xác thực. Điều này mang lại cho tôi gọn gàng với câu hỏi đầu tiên của tôi:Xác thực dựa trên mã thông báo REST API
Điều này có thực sự tốt hơn là yêu cầu khách hàng sử dụng HTTP Basic Auth trên mỗi yêu cầu và lưu vào bộ nhớ cache đến máy chủ dịch vụ xác thực không?
Giải pháp xác thực cơ bản có lợi thế là không yêu cầu toàn bộ chuyến đi khứ hồi tới máy chủ trước khi yêu cầu nội dung có thể bắt đầu. Các thẻ có khả năng linh hoạt hơn trong phạm vi (tức là chỉ cấp quyền đối với các tài nguyên hoặc hành động cụ thể), nhưng điều đó có vẻ phù hợp hơn với ngữ cảnh OAuth so với trường hợp sử dụng đơn giản của tôi.
Hiện nay thẻ được mua như thế này:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
Các api_key
, timestamp
và verifier
được yêu cầu của tất cả các yêu cầu. Các "xác minh" được trả về bởi:
sha1(timestamp + api_key + shared_secret)
Ý định của tôi là để chỉ cho phép các cuộc gọi từ các bên đã biết, và để ngăn chặn các cuộc gọi không bị tái sử dụng đúng nguyên văn.
Điều này có đủ tốt không? Underkill? Overkill?
Với một thẻ trong tay, khách hàng có thể có được các nguồn lực:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Đối với các cuộc gọi đơn giản nhất có thể, điều này dường như loại khủng khiếp tiết. Xem xét các shared_secret
sẽ gió lên được nhúng trong (tối thiểu) một ứng dụng iOS, từ đó tôi sẽ giả sử nó có thể được trích xuất, điều này thậm chí cung cấp bất cứ điều gì ngoài một cảm giác sai về an ninh?
Thay vì sử dụng sha1 (timestamp + API_KEY + shard_secret), bạn nên sử dụng HMAC (shared_secret, timpestamp + API_KEY) cho một bảo mật tốt hơn băm http://en.wikipedia.org/wiki/Hash- based_message_authentication_code –
@ MiguelA.Carrasco Và dường như là sự đồng thuận vào năm 2017 rằng bCrypt là công cụ băm mới. –