2009-08-10 43 views
6

Tôi đang làm việc trên một API REST cho một ứng dụng web cho đến bây giờ chúng tôi đã phát triển nội bộ cho một vài ứng dụng đồng hành. Bây giờ chúng tôi đang xem xét việc mở cửa cho các nhà phát triển bên ngoài, chúng tôi muốn thêm mã thông báo vào API để giúp xác định ai đang đưa ra yêu cầu và nói chung để giúp quản lý việc sử dụng nó. Tại thời điểm này, chúng tôi đang sử dụng https và xác thực cơ bản để xác thực người dùng trên API.Phương pháp tiếp cận tốt cho sơ đồ mã thông báo API web?

Đề án mã thông báo mà chúng tôi đã thảo luận sẽ rất đơn giản khi mỗi nhà phát triển được chỉ định 1 hoặc nhiều mã thông báo và các mã thông báo này sẽ được chuyển thành thông số với mỗi yêu cầu.

Câu hỏi của tôi là nếu bạn đã làm điều gì đó tương tự trước khi bạn làm điều đó (bạn đã làm nhiều hay ít, bạn xử lý bảo mật, v.v) và bạn có đề xuất gì không?

Cảm ơn!

+0

Đối với bất kỳ ai quan tâm, tôi đã viết một câu chuyện về cách chuyển từ bảo mật sang REST API an toàn mà không cần OAuth tại đây: http://www.thebuzzmedia.com/designing-a-secure-rest-api-without- oauth-authentication/ Vấn đề không phải là với nhận dạng (mã thông báo duy nhất, v.v.) là sự cố với việc đóng các vectơ tấn công và người mạo danh người dùng của bạn. Qua HTTP yêu cầu tổng kiểm tra hoặc "HMAC" - ký tất cả các giá trị trong yêu cầu bằng khóa bí mật mà chỉ máy khách và máy chủ biết. Qua HTTPS, dễ dàng hơn nhiều, một mã thông báo đơn giản hoạt động tốt. –

Trả lời

6

Trước tiên, bạn có thể muốn xem http://OAuth.net. Tùy thuộc vào thời gian sử dụng của bạn, nó có thể cung cấp bảo mật bạn cần.

Đối với mã thông báo, đó là BLOB đối với hầu hết các giao thức, bao gồm OAuth. Bạn có thể đặt bất kỳ thông tin nào bạn cần vào nó ở bất kỳ định dạng nào.

Đây là những gì chúng tôi làm,

  1. Đầu tiên chúng ta gán mỗi nhà phát triển một phím với bí mật liên quan.
  2. Bản thân mã thông báo là cặp giá trị tên được mã hóa. Chúng tôi đặt những thứ như tên người dùng, hết hạn, id phiên, vai trò v.v. trong đó. Nó được mã hóa với bí mật của chính chúng ta nên không ai khác có thể làm được.
  3. Để dễ sử dụng với API web, chúng tôi sử dụng phiên bản Base64 an toàn cho URL để mã thông báo luôn an toàn cho URL.

Hy vọng điều đó sẽ hữu ích!

2

Bạn cũng có thể muốn suy nghĩ về việc có thể thêm mã thông báo dựa trên thời gian cho phép bạn giới hạn lượng thời gian yêu cầu hợp lệ. điều này sẽ giúp với ai đó đang cố gắng thực hiện một cuộc tấn công phát lại.

Bạn sẽ có một cuộc gọi bắt tay để nhận/gán một mã thông báo thời gian hợp lệ dựa trên developerKey ở trên. Mã thông báo này sẽ được lưu trữ cục bộ và được trả lại cho người gọi.

Nhà phát triển sau đó sẽ sử dụng khóa này trong yêu cầu xác thực yêu cầu và nhà phát triển.

Ví dụ, bạn có thể sử dụng khóa đó trong 5 phút hoặc 10 yêu cầu hoặc bất kỳ thứ gì bạn xác định. sau thời điểm đó, mã thông báo dựa trên thời gian được tạo sẽ bị xóa khỏi danh sách hợp lệ và không thể sử dụng được nữa. nhà phát triển sau đó sẽ phải yêu cầu mã thông báo mới.

1

UUID rất tốt cho bất kỳ khóa ngẫu nhiên tạm thời nào mà bạn ưa thích. Không thể đoán trước và nhanh chóng để tạo ra, với các va chạm rất khó có hiệu quả độc đáo. Tạo các khóa phiên tốt đẹp.

Các vấn đề liên quan