Thực tiễn tốt nhất để xây dựng Khóa API an toàn

Chúng ta đều biết API có giá trị như thế nào. Họ là cửa ngõ để khám phá các dịch vụ khác, tích hợp với chúng và xây dựng các giải pháp tuyệt vời nhanh hơn.

Bạn có thể đã xây dựng hoặc đang nghĩ đến việc xây dựng API cho các nhà phát triển khác sử dụng. API cần một số hình thức xác thực để cung cấp quyền truy cập được ủy quyền vào dữ liệu mà nó trả về.

Có một số tiêu chuẩn xác thực hiện có như Khóa API, OAuth, JWT, v.v.

Trong bài viết này, chúng tôi sẽ xem xét cách quản lý chính xác Khóa API để truy cập API.

Vậy tại sao các khóa API?

Khóa API rất đơn giản để sử dụng, chúng ngắn, tĩnh và không hết hạn trừ khi bị thu hồi. Họ cung cấp một cách dễ dàng cho nhiều dịch vụ để giao tiếp.

Nếu bạn cung cấp API để khách hàng của bạn tiêu thụ, thì đó là điều cần thiết để bạn xây dựng nó theo đúng cách.

Hãy để bắt đầu, và tôi sẽ chỉ cho bạn cách xây dựng Khóa API đúng cách.

Tạo khóa API

Vì chính khóa API là một danh tính để xác định ứng dụng hoặc người dùng, nên nó cần phải là duy nhất, ngẫu nhiên và không thể đoán được. Các khóa API được tạo cũng phải sử dụng chữ và số và các ký tự đặc biệt. Một ví dụ về khóa API như vậy là zaCELgL.0imfnc8mVLWwsAawjYr4Rx-Af50DDqtlx.

Lưu trữ khóa API an toàn

Vì khóa API cung cấp quyền truy cập trực tiếp vào dữ liệu, nên nó giống như một mật khẩu mà người dùng web hoặc ứng dụng di động cung cấp để có quyền truy cập vào cùng một dữ liệu.

Hãy suy nghĩ về nó. Lý do chúng tôi cần lưu trữ khóa API là để đảm bảo rằng khóa API trong yêu cầu là hợp lệ và do chúng tôi cấp (giống như mật khẩu).

Chúng tôi không cần phải biết khóa API thô, nhưng chỉ cần xác thực rằng khóa đó là chính xác. Vì vậy, thay vì lưu trữ khóa trong văn bản thuần túy (xấu) hoặc mã hóa nó, chúng ta nên lưu trữ nó dưới dạng giá trị băm trong cơ sở dữ liệu của chúng tôi.

Giá trị băm có nghĩa là ngay cả khi ai đó có quyền truy cập trái phép vào cơ sở dữ liệu của chúng tôi, không có khóa API nào bị rò rỉ và tất cả đều an toàn. Người dùng cuối sẽ gửi khóa API thô trong mỗi yêu cầu API và chúng tôi có thể xác thực nó bằng cách băm khóa API trong yêu cầu và so sánh khóa băm với hàm băm được lưu trữ trong cơ sở dữ liệu của chúng tôi. Đây là một triển khai sơ bộ của nó trong Java:

Trong đoạn mã trên, khóa chính sẽ là sự kết hợp của tiền tố và hàm băm của khóa API {tiền tố}. {Hash_of_whole_api_key}.

Nhưng giữ lấy, có nhiều hơn. Lưu trữ một giá trị băm mang lại các vấn đề khả năng sử dụng cụ thể. Hãy để địa chỉ đó ngay bây giờ.

Trình bày Khóa API cho người dùng

Vì chúng tôi không lưu trữ khóa API gốc, chúng tôi chỉ có thể hiển thị nó một lần cho người dùng tại thời điểm tạo. Vì vậy, hãy chắc chắn để cảnh báo người dùng rằng nó không thể được truy xuất lại và họ cần tạo mã thông báo mới nếu họ quên sao chép khóa API và lưu trữ an toàn. Bạn có thể làm một cái gì đó như thế này:

Hiển thị Khóa API được tạo bằng thông báo cảnh báo

Cách người dùng có thể xác định Khóa API được tạo sau này

Một vấn đề khác là làm thế nào người dùng xác định khóa API phù hợp trong bảng điều khiển của bạn nếu họ cần chỉnh sửa hoặc thu hồi nó. Điều này có thể được giải quyết bằng cách thêm tiền tố vào khóa API. Lưu ý trong hình phía trên 7 ký tự đầu tiên (đó là tiền tố của chúng tôi), được phân tách bằng dấu chấm.

Bây giờ bạn có thể lưu trữ tiền tố này trong cơ sở dữ liệu và hiển thị nó trong bảng điều khiển để người dùng có thể nhanh chóng xác định mục nhập khóa API phù hợp, như sau:

Bảng điều khiển quản lý API Key

Don Patrick cung cấp cho API Key toàn bộ sức mạnh

Một lỗi phổ biến mà các nhà cung cấp khóa API mắc phải là cung cấp một khóa để truy cập mọi thứ, vì nó dễ quản lý. Don lồng làm điều đó. Giả sử rằng người dùng chỉ cần đọc email và tạo khóa API. Nhưng khóa đó hiện có quyền truy cập đầy đủ vào các dịch vụ khác, bao gồm xóa các bản ghi trong cơ sở dữ liệu.

Cách tiếp cận đúng là cho phép người dùng cuối hạn chế quyền truy cập API Key và chọn các hành động cụ thể mà khóa API có thể thực hiện. Điều này có thể được thực hiện bằng cách cung cấp phạm vi, trong đó mỗi phạm vi thể hiện một sự cho phép cụ thể.

Ví dụ,

  • nếu bạn cần một khóa API để chỉ gửi email, bạn có thể tạo một khóa API với phạm vi là email Email.send
  • nếu người dùng cuối có nhiều máy chủ và mỗi máy chủ thực hiện một hành động cụ thể, thì một khóa API riêng có thể được tạo với một phạm vi cụ thể.

Vì vậy, trong khi tạo khóa API, cho phép người dùng chọn quyền truy cập mà khóa API đó nên có, như trong hình ảnh bên dưới.

Bằng cách này, người dùng có thể tạo nhiều khóa API, mỗi khóa có quy tắc truy cập cụ thể để bảo mật tốt hơn. Và khi nhận được yêu cầu API, bạn có thể kiểm tra xem Khóa API có phạm vi phù hợp để truy cập API đó không. Bây giờ cơ sở dữ liệu trông giống như thế này:

Thực thể cơ sở dữ liệu API Key

Xếp hạng các khóa API giới hạn

Có, bạn có thể đã biết điều đó, nhưng điều quan trọng là xếp hạng các yêu cầu giới hạn được thực hiện bằng Khóa API cụ thể để đảm bảo không có tác nhân xấu nào có thể gỡ xuống máy chủ API của bạn hoặc gây ra các vấn đề về hiệu suất ảnh hưởng đến các khách hàng khác của bạn. Có một giải pháp theo dõi và giới hạn tỷ lệ thích hợp sẽ giữ cho dịch vụ API khỏe mạnh.

Phần kết luận

Các khóa API, khi được xây dựng đúng, vẫn là một cách tuyệt vời để giao tiếp với một máy chủ khác. Như chúng tôi đã xem xét trong bài viết này, việc tuân theo các thực tiễn nhất định mang lại lợi ích cho cả người tiêu dùng API và nhà cung cấp API. Hy vọng điều này sẽ giúp bạn.

Chúc mừng Bảo mật API của bạn!