Chúng ta sẽ bắt đầu với định nghĩa tiêu chuẩn:
Khóa API là một chuỗi ký tự được sử dụng để xác định và xác thực một ứng dụng hoặc người dùng yêu cầu dịch vụ của một API (giao diện lập trình ứng dụng).
Trong bài viết này, chúng tôi chia nhỏ định nghĩa này cho những người tò mò (công nghệ hoặc không công nghệ), những người muốn biết câu chuyện bên trong về khóa API là gì và chức năng của nó cũng như cách thức hoạt động của nó.
Khóa API là cơ chế bảo mật tiêu chuẩn cho bất kỳ ứng dụng nào cung cấp dịch vụ cho các ứng dụng khác.
Mặc dù chúng không phải là phương pháp duy nhất (API có thể sử dụng JWT, mà chúng tôi đã viết ở đây: khóa API so với xác thực JWT ) , khóa API là phương pháp bảo mật API thường được sử dụng nhất.
API Google Maps là một ví dụ về dịch vụ API (“điểm cuối”) yêu cầu khóa API. Nếu bạn cung cấp cho API của Google một địa chỉ thực (giả sử “1001 Main Street, NY, NY”), API sẽ trả về vĩ độ và kinh độ của vị trí có khả năng xảy ra nhất (40.736124774992504, -73.82508447321075).
Tuy nhiên, nếu không có khóa API hợp lệ, Google sẽ không trả lời yêu cầu của bạn. Bạn cần sự cho phép đặc biệt. Khóa API cho phép Google biết bạn là ai và bạn có quyền truy cập vào dịch vụ bản đồ của họ hay không.
Điều này được gọi là xác thực (trái ngược với ủy quyền, mà chúng ta sẽ thảo luận ở phần sau của bài viết.)
Nhân tiện, để hiểu cơ chế hoạt động như thế nào, khi chúng tôi viết, “Chúng tôi cung cấp địa chỉ cho API của Google” hoặc “Chúng tôi gửi cho Google một khóa API”, chúng tôi đang đề cập đến việc gửi thông tin đến máy chủ Google (đưa ra yêu cầu thông qua các phương thức yêu cầu HTTP như Đăng và Nhận) và nhận lại thông tin (nhận phản hồi từ cùng một API).
Tóm lại:
Nếu nhà phát triển muốn tạo ứng dụng bản đồ bằng cách sử dụng danh sách địa chỉ thế giới gần như đầy đủ của Google, trước tiên họ cần đăng ký với Google và lấy khóa API để có quyền sử dụng dịch vụ Google Map API của họ.
Một số API không yêu cầu khóa API. Ví dụ: URL Youtube mà bạn sử dụng để xem video thực sự là một yêu cầu API không yêu cầu khóa API.
Nó được sử dụng miễn phí từ mọi nơi trên thế giới, trên mọi thiết bị, bởi tất cả mọi người (không chỉ nhà phát triển).
Điều đó có nghĩa là, các API của Youtube cũng cung cấp các dịch vụ khác yêu cầu khóa API, chẳng hạn như các dịch vụ cung cấp thông tin (riêng tư hoặc thường phải trả phí) về danh sách phát kênh, lịch sử nhận xét, thống kê sử dụng và hàng trăm dữ liệu khác do Youtube sở hữu.
Một mối quan tâm trung tâm với bất kỳ API nào là tính dễ sử dụng của nó. Như chúng tôi sẽ nhắc lại bên dưới trong ngữ cảnh bảo mật: tính dễ sử dụng là điều tối quan trọng đối với việc sử dụng API.
Tất cả các công ty sử dụng API đầu tiên đều muốn giảm thiểu mọi rắc rối trong việc sử dụng các sản phẩm API của họ. Điều này bao gồm việc làm cho việc truy cập vào các API của họ trở nên dễ dàng và an toàn, đó chính xác là những gì các khóa API được thiết kế để cung cấp.
Như được mô tả ở trên, khóa API cho phép máy chủ xác định bất kỳ nhà phát triển hoặc ứng dụng nào (người yêu cầu hoặc người dùng ) đang cố gắng truy cập (các) dịch vụ của nó.
Khóa API cũng xác định một tập hợp các quyền truy cập . Quyền truy cập cho phép người yêu cầu thực hiện các hành động cụ thể và cấm người đó thực hiện các hành động khác.
Chúng ta hãy đi vào chi tiết.
Khóa API của bạn là số nhận dạng duy nhất được tạo thành từ sự kết hợp của số và chữ cái. Một số cũng chứa các ký tự không phải chữ và số.
Số nhận dạng duy nhất không tự biểu thị bất kỳ thứ gì; nó chỉ có ý nghĩa là tính duy nhất của nó. Nó giống với mật khẩu hoặc mã bí mật.
Các khóa API thường chứa trên 64 ký tự và được tạo bởi bộ ngẫu nhiên hệ thống tạo ra các mã nhận dạng duy nhất phổ quát (thường được gọi là GUID s).
Hãy coi khóa API như một cách để có quyền truy cập vào dữ liệu và chức năng của ứng dụng thông qua API.
Mỗi người yêu cầu API gửi cho máy chủ một số nhận dạng duy nhất, máy chủ sử dụng để xác định ( xác thực ) nếu người hoặc ứng dụng yêu cầu dịch vụ có quyền làm như vậy.
Nếu máy chủ không thể xác thực người yêu cầu một lệnh gọi API (yêu cầu), nó sẽ gửi lại phản hồi thất bại. Đây là ý tưởng cơ bản đằng sau lý do tại sao bạn tạo khóa API: nếu bạn đang sử dụng khóa mà máy chủ không nhận ra, thì bạn sẽ không thể sử dụng dịch vụ.
Tuy nhiên, nếu máy chủ nhận ra khóa API và xác thực chủ sở hữu khóa thì người dùng đó có quyền sử dụng dịch vụ.
Bước tiếp theo là máy chủ cho phép người yêu cầu thực hiện một hoặc nhiều việc.
Quy trình ủy quyền xác định quyền và phạm vi của người yêu cầu. Ủy quyền xác định cách thức chính xác mà người yêu cầu được xác thực có thể sử dụng API.
Nó liên quan đến việc xác định quyền của bạn (chức năng và dữ liệu nào bạn có thể truy cập) và phạm vi (lượng dữ liệu, thời gian bạn có thể sử dụng API, v.v.).
Quyền là về những gì bạn có thể làm. Nếu khóa API của người yêu cầu chứa quyền tìm kiếm dữ liệu, thì người yêu cầu có thể đọc dữ liệu để thực hiện tìm kiếm.
Nếu người yêu cầu có quyền ghi dữ liệu, thì người yêu cầu có thể thực hiện một số hoặc tất cả các thao tác ghi . Quyền ghi thường đi kèm với nhiều chi tiết hơn. Ví dụ: người yêu cầu có thể có quyền cập nhật chỉ mục nhưng không xóa các bản ghi.
Bạn cũng có thể kết hợp các quyền. Ví dụ: một người yêu cầu có thể có cả khả năng đọc và ghi hoặc chỉ đọc. Thông thường, người yêu cầu có một số API để thực hiện các hành động khác nhau. Ví dụ:
Chỉ đọc cho các tìm kiếm.
Quyền truy cập Đọc & Ghi để duyệt cũng như lập chỉ mục (thêm, cập nhật, xóa).
Quyền truy cập của quản trị viên , bao gồm mọi thứ, bao gồm cả việc tạo các API khác.
Mỗi hệ thống API đều có một khóa API toàn cầu không chỉ cho phép các thao tác đọc và ghi mà còn có toàn quyền truy cập vào bất kỳ thứ gì khác mà một API có thể làm.
Ví dụ: API quản trị cho phép các ứng dụng và người dùng thực hiện các hành động meta như thêm, xóa hoặc sửa đổi người dùng, số nhận dạng, quyền và phạm vi.
Với sức mạnh của khóa API quản trị, bạn sẽ muốn khóa API này hoàn toàn an toàn - nghĩa là ẩn và khóa không cho mọi người biết.
Điều tương tự cũng áp dụng cho bất kỳ khóa API cấp ghi nào. Các phím chỉ đọc có thể linh hoạt hơn tùy thuộc vào trường hợp sử dụng. Đọc dữ liệu nhạy cảm với doanh nghiệp rõ ràng cần bảo mật cao hơn so với tìm kiếm sản phẩm và phim trên trang web.
Khi người yêu cầu có quyền làm điều gì đó, API có thể hạn chế hoặc mở rộng khả năng của người yêu cầu trong quyền đó. Ví dụ: nếu người yêu cầu có quyền cập nhật chỉ mục chung, thì khóa API có thể giới hạn quyền truy cập của người yêu cầu đối với chỉ một số chỉ mục nhất định.
Hoặc, khóa API có thể xác định phạm vi quyền truy cập chỉ đọc cho phép người yêu cầu chỉ truy cập một số lượng nhỏ các bản ghi.
Bạn có thể sử dụng phạm vi để bảo mật hơn nữa bằng cách lọc ra các địa chỉ IP nhất định. Bạn cũng có thể đặt thời gian có hiệu lực, có thể là một yêu cầu mỗi ngày hoặc trên một số lượng nhỏ yêu cầu hàng ngày trong khoảng thời gian 30 ngày.
Cuối cùng, một khóa API có thể cung cấp các giới hạn dựa trên bộ lọc. Ví dụ: khóa API có thể cho phép người dùng chỉ cập nhật các mặt hàng “quần áo” hoặc “thực phẩm”. Hoặc nó có thể hạn chế người yêu cầu chỉ đọc thực hiện các tìm kiếm hoặc bộ lọc được xác định trước.
Một ví dụ điển hình về điểm cuối cùng về việc sử dụng API hạn chế là nơi bạn cấp quyền truy cập chỉ đọc, nhưng hạn chế nó bằng bộ lọc bỏ qua dữ liệu nhạy cảm. Điều này bổ sung thêm bảo mật, cho phép người yêu cầu xem dữ liệu được thiết kế chỉ để xem công khai.
Nhưng vấn đề bảo mật thì cần thảo luận nhiều hơn.
Về mặt bảo mật, một khóa API chỉ đi xa được. Về cơ bản, nếu một chìa khóa bị đánh cắp hoặc bị rò rỉ, thì sẽ không còn bảo mật nữa.
Có nhiều cách để ai đó có thể lấy khóa API. Tin tặc có thể chặn yêu cầu, đánh cắp khóa và sau đó thay đổi yêu cầu thành một thứ gì đó nguy hại hơn nhiều.
Hoặc, như thường lệ, một nhà phát triển có thể vô tình tiết lộ khóa API bằng cách gửi nó qua internet để bất kỳ ai cũng có thể dễ dàng tìm thấy. Hoặc vô tình đẩy nó vào một repo Git. Hoặc viết nó trên khăn ăn và để nó trên bàn nhà hàng.
Một số biện pháp bảo vệ an toàn dựa vào việc kiểm tra an ninh bổ sung. Một số phương pháp này yêu cầu người yêu cầu thực hiện thêm công việc, điều này làm suy yếu tính phổ biến của API. Cần lưu ý API 101:
Tính dễ sử dụng là điều tối quan trọng đối với việc sử dụng API, vì vậy bạn muốn giảm thiểu mọi rắc rối.
Dưới đây là một số biện pháp bảo vệ an toàn không yêu cầu thêm chi phí hoặc gánh nặng cho người dùng API:
Tạo giới hạn tốc độ, kiểm soát số lần API có thể được gọi.
Tạo các giới hạn khác hoặc các hạn chế ứng dụng để giảm thiểu các cuộc tấn công.
Sử dụng các phương pháp phát hiện tấn công để báo hiệu hành vi không mong muốn, liên kết giới thiệu hoặc hành vi tấn công đã biết.
Từ chối các yêu cầu nằm ngoài quy chuẩn hoặc gây tổn hại đến quyền riêng tư hoặc dữ liệu.
Và như đã đề cập ở trên, loại bỏ quyền truy cập vào dữ liệu không nhạy cảm.
Thường xuyên tạo hoặc tự động tạo khóa API mới theo cách thủ công.
Lưu ý kỹ thuật: Nhiều biện pháp bảo vệ trong số này có thể được thêm vào tiêu đề dưới dạng các tham số trong yêu cầu API.
Dưới đây là các kỹ thuật bảo mật API phổ biến nhất yêu cầu các nhà phát triển làm nhiều việc hơn là chỉ cung cấp khóa API:
Sử dụng một loại khóa API đặc biệt được gọi là Khóa API bảo mật.
Đăng nhập và sử dụng id người dùng và mật khẩu.
Sử dụng mã thông báo xác thực (ví dụ: mã thông báo JWT) để xác thực và ủy quyền.
Mã hóa. Để điều này hoạt động, người dùng phải có cùng một phần mềm mã hóa mà máy chủ API có. Phần mềm mã hóa chuyển đổi khóa API thành dữ liệu không thể đọc được mà chỉ máy chủ API mới có thể hiểu được.
Khóa API bảo mật chứa các biện pháp bảo vệ an toàn bổ sung so với khóa API tiêu chuẩn: (a) nó tạm thời (được tạo ngay lập tức và tạm thời); như vậy, nó không thể được nhìn thấy trên trang tổng quan để được sửa đổi hoặc quản lý theo bất kỳ cách nào.
Quan trọng hơn, (b) nó chứa id của người dùng - do đó, chỉ một người dùng có thể sử dụng khóa.
Thông thường, các khóa API được tạo một lần cho bất kỳ người dùng nào và giữ nguyên suốt đời. Tuy nhiên, có hai nhược điểm với khóa vĩnh viễn:
Một khi ai đó đánh cắp chìa khóa, họ sẽ có thể sử dụng nó cho đến khi hành vi trộm cắp bị phát hiện và rút chìa khóa.
Nếu bạn cần 10.000 người dùng để có các khóa duy nhất, bạn sẽ cần tạo và duy trì tất cả chúng. Và trong khi bạn có thể tự động tạo khóa API mới, hầu như bạn sẽ luôn cần phải thay đổi mã theo cách thủ công.
Hầu hết các ứng dụng cấp sản xuất cần thứ gì đó an toàn hơn và dễ quản lý hơn - mà không cần thực hiện thêm bất kỳ công việc nào.
Cách hoạt động: Khóa API bảo mật thúc đẩy phiên và / hoặc id người dùng bằng cách bao gồm thông tin đó như một phần của quá trình tạo khóa. Về cơ bản, khóa được tạo nhanh chóng bằng cách kết hợp số nhận dạng người dùng với phạm vi của khóa (ví dụ: giới hạn thời gian chờ, bộ lọc bảo mật).
Sau khi khóa được tạo, người yêu cầu phải luôn gửi khóa API đã tạo cùng với id người dùng và phạm vi của nó. Sau đó, máy chủ API sẽ tạo lại khóa bằng cách sử dụng id người dùng và phạm vi, sau đó so sánh nó với khóa mà người dùng đã gửi. Nếu chúng khác nhau, thì rõ ràng đó là một vụ hack.
Logic kiểm tra kỹ này chỉ là một bước hướng tới bảo mật tốt hơn. Bước tiếp theo là yêu cầu người dùng API đăng nhập.
Phương pháp bảo mật cuối cùng mà chúng tôi đề cập ở đây liên quan đến việc yêu cầu người dùng API đăng nhập.
Trong trường hợp này, nếu đăng nhập thành công, máy chủ API sẽ phát hành một mã thông báo duy nhất, không thể đọc được mà người dùng API phải sử dụng khi họ vẫn đăng nhập. Ngoài ra, mã thông báo bao gồm thông tin đăng nhập của người dùng, gây khó khăn cho bất kỳ ai khác ngoài người dùng gửi mã thông báo.
Do đó, chúng tôi cải tiến phương pháp Khóa API được bảo mật tạm thời theo hai cách quan trọng:
JWT yêu cầu đăng nhập.
JWT tạo mã thông báo có giá trị chứa phiên bản được mã hóa của thông tin đăng nhập của người dùng. Các thông tin đăng nhập người dùng đó cho phép máy chủ API xác thực người dùng với mọi yêu cầu API kế tiếp.
Tìm hiểu thêm về mã thông báo JWT và nó khác với khóa API như thế nào.
Chúng tôi đã thảo luận về các mục đích của khóa API, nó trông như thế nào, cách hoạt động và có thể và không thể thực hiện được với khóa API.
Chúng tôi cũng đã đi sâu vào một số chi tiết về bảo mật. Chúng ta sẽ hoàn thành một khía cạnh khác: theo dõi việc sử dụng API và cải thiện API.
API dựa vào trải nghiệm người dùng để cải thiện thiết kế và chức năng của nó. Một công ty muốn cung cấp API tốt nhất tuyệt đối trong thị trường API cạnh tranh ngày càng tăng, phải biết cách khách hàng sử dụng API của họ.
Bằng cách ghi nhật ký mọi yêu cầu - yêu cầu nào, số lượng yêu cầu, sự thành công và thất bại của mỗi yêu cầu, nhà cung cấp API thêm báo cáo, gỡ lỗi và phân tích vào thiết kế và triển khai của API.