Bảo mật API bằng cách yêu cầu khoá API

Bạn đang xem tài liệu về Apigee Edge.
Hãy xem tài liệu về Apigee X.

Kiến thức bạn sẽ học được

Thông qua hướng dẫn này, bạn sẽ học cách:

  • Tạo proxy API yêu cầu khóa API.
  • Thêm một sản phẩm API.
  • Thêm nhà phát triển và đăng ký ứng dụng.
  • Gọi API bằng khoá API.

Điều quan trọng là phải bảo vệ API của bạn khỏi bị truy cập trái phép. Có một cách để thực hiện việc đó là sử dụng khoá API (còn gọi là khoá công khai, khoá người dùng hoặc khoá ứng dụng).

Khi yêu cầu API, ứng dụng phải cung cấp khóa hợp lệ. Trong thời gian chạy, chính sách Xác minh khoá API sẽ kiểm tra để đảm bảo khoá API được cung cấp:

  • Là hợp lệ
  • Chưa bị thu hồi
  • Khớp khoá API cho sản phẩm API cho thấy các tài nguyên được yêu cầu

Nếu khoá hợp lệ, thì yêu cầu sẽ được phép. Nếu khoá không hợp lệ thì yêu cầu sẽ dẫn đến việc uỷ quyền không thành công.

Trong hướng dẫn này, bạn sẽ tạo một proxy API yêu cầu phải có khoá API hợp lệ để truy cập vào API đó.

Bạn cần có

  • Một tài khoản Apigee Edge. Nếu chưa có tài khoản, bạn có thể đăng ký bằng cách làm theo hướng dẫn trong bài viết Tạo tài khoản Apigee Edge.
  • Trình duyệt web để thực hiện lệnh gọi API.
  • (Đối với phần tín dụng bổ sung, không bắt buộc) cURL đã được cài đặt trên máy của bạn để thực hiện lệnh gọi API từ dòng lệnh.

Tạo proxy API

Giới thiệu về "target mocktarget"

Dịch vụ mocktarget được lưu trữ tại Apigee và trả về dữ liệu đơn giản. Tính năng này không yêu cầu khoá API hoặc mã truy cập. Thực tế, bạn có thể truy cập tệp này trong trình duyệt web. Hãy dùng thử tính năng này bằng cách nhấp vào các tính năng sau:

http://mocktarget.apigee.net

Mục tiêu trả về Hello, Guest!. Sử dụng tài nguyên /help để nhận trang trợ giúp về các tài nguyên API khác có sẵn

  1. Truy cập vào https://apigee.com/edge rồi đăng nhập.
  2. Chuyển sang tổ chức mà bạn muốn bằng cách nhấp vào tên người dùng ở đầu thanh điều hướng bên để hiển thị trình đơn hồ sơ người dùng, rồi chọn tổ chức đó từ danh sách.

    chọn tổ chức trong trình đơn hồ sơ người dùng
  3. Nhấp vào API Proxy trên trang đích để hiển thị danh sách API API.

    Trình đơn Edge API
  4. Nhấp vào + Proxy.
    Nút tạo proxy
  5. Trên trang Tạo proxy, chọn Proxy ngược (phổ biến nhất).
  6. Trên trang Chi tiết proxy, hãy định cấu hình proxy như sau:
    Trong trường này làm điều này
    Tên proxy Nhập: helloworld_apikey
    Đường dẫn cơ sở của dự án

    Thay đổi thành: /helloapikey

    Đường dẫn cơ sở của dự án là một phần của URL dùng để gửi yêu cầu đến proxy API.

    Lưu ý: Để biết các đề xuất của Apigee về việc tạo phiên bản API, hãy xem Tạo phiên bản trong sách điện tử Thiết kế API Web: Đường liên kết bị thiếu.

    API hiện có

    Nhập: http://mocktarget.apigee.net

    Điều này xác định URL mục tiêu mà Apigee Edge gọi trong một yêu cầu đến proxy API.

    Nội dung mô tả Nhập: hello world protected by API key
  7. Nhấp vào Tiếp theo.
  8. Trên trang Các chính sách chung, đối với Bảo mật: Ủy quyền, hãy chọn Khóa API rồi nhấp vào Tiếp theo. Thao tác này sẽ thêm hai chính sách vào proxy API.
  9. Trên trang Virtual Hosts (Máy chủ ảo), hãy chọn default (mặc định) và secure (bảo mật) rồi nhấp vào Next (Tiếp theo). Khi chọn mặc định, bạn có thể gọi API bằng http://. Khi chọn an toàn, bạn sẽ có thể gọi API bằng https://.
  10. Trên trang Tóm tắt, hãy nhớ chọn môi trường triển khai thử nghiệm, sau đó nhấp vào Tạo và triển khai.
  11. Bạn sẽ thấy thông báo xác nhận rằng proxy API mới và một sản phẩm API đã được tạo thành công và proxy API đã được triển khai cho môi trường thử nghiệm.
  12. Nhấp vào Edit proxy (Chỉnh sửa proxy) để hiển thị trang Overview (Tổng quan) về proxy API.

Xem các chính sách

  1. Trong trình chỉnh sửa proxy API, hãy nhấp vào thẻ Phát triển. Bạn sẽ thấy hai chính sách đã được thêm vào luồng yêu cầu của proxy API:
    • Xác minh khoá API: Kiểm tra lệnh gọi API để đảm bảo có khoá API hợp lệ (được gửi dưới dạng tham số truy vấn).
    • Xoá khoá truy vấn thông số truy vấn: Chính sáchassignMessage sẽ xoá khoá API sau khi được đánh dấu, để khoá này không bị truyền đi và hiển thị khi không cần thiết.
  2. Nhấp vào biểu tượng Xác minh chính sách khóa API trong chế độ xem quy trình và xem cấu hình XML của chính sách trong chế độ xem mã thấp hơn. Phần tử <APIKey> cho chính sách biết vị trí cần tìm khoá API khi thực hiện lệnh gọi. Theo mặc định, hệ thống sẽ tìm khoá dưới dạng tham số truy vấn có tên là apikey trong yêu cầu HTTP:

    <APIKey ref="request.queryparam.apikey" />
    

    Tên apikey là tuỳ ý và có thể là bất kỳ thuộc tính nào chứa khoá API.

Thử gọi API

Ở bước này, bạn sẽ thực hiện lệnh gọi API thành công trực tiếp đến dịch vụ đích, sau đó, bạn sẽ thực hiện lệnh gọi API không thành công để xem trạng thái bảo vệ của proxy theo các chính sách.

  1. Thành công

    Trong trình duyệt web, hãy chuyển đến địa chỉ sau. Đây là dịch vụ mục tiêu mà proxy API được định cấu hình để chuyển tiếp yêu cầu, nhưng bạn sẽ được chuyển trực tiếp vào lúc này:

    http://mocktarget.apigee.net
    

    Bạn sẽ nhận được phản hồi thành công sau: Hello, Guest!

  2. Không thành công

    Bây giờ, hãy thử gọi proxy API của bạn:

    http://ORG_NAME-test.apigee.net/helloapikey
    

    thay thế ORG_NAME bằng tên của tổ chức Edge.

    Nếu không có chính sách Xác minh khoá API, lệnh gọi này sẽ cung cấp cho bạn phản hồi giống như lệnh gọi trước. Nhưng trong trường hợp này, bạn sẽ nhận được phản hồi lỗi như sau:

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}
    

    có nghĩa là bạn đã không chuyển khoá API hợp lệ (dưới dạng tham số truy vấn).

Trong các bước tiếp theo, bạn sẽ thêm một sản phẩm API.

Thêm một sản phẩm API

Cách thêm một sản phẩm API thông qua giao diện người dùng Apigee:

  1. Chọn Xuất bản > Sản phẩm API.
  2. Nhấp vào +Sản phẩm API.
  3. Nhập Chi tiết sản phẩm cho sản phẩm API.

    Trường Mô tả
    Tên Tên nội bộ của sản phẩm API. Không chỉ định các ký tự đặc biệt trong tên.
    Lưu ý: Bạn không thể chỉnh sửa tên sau khi tạo sản phẩm API. Ví dụ: helloworld_apikey-Product.
    Tên hiển thị Tên hiển thị của sản phẩm API. Tên hiển thị được sử dụng trong giao diện người dùng và bạn có thể chỉnh sửa tên đó bất cứ lúc nào. Nếu bạn không chỉ định, Giá trị tên sẽ được sử dụng. Trường này được điền tự động bằng cách sử dụng Giá trị tên; bạn có thể chỉnh sửa hoặc xóa nội dung trong trường. Tên hiển thị có thể bao gồm các ký tự đặc biệt. Ví dụ: helloworld_apikey-Product
    Mô tả Mô tả của sản phẩm API. Ví dụ: Test product for tutorial.
    Môi trường Các môi trường mà sản phẩm API cho phép truy cập. Ví dụ: test hoặc prod.
    Quyền truy cập Chọn Công khai.
    Tự động phê duyệt yêu cầu truy cập Bật chế độ tự động phê duyệt các yêu cầu chính đối với sản phẩm API này trên bất kỳ ứng dụng nào.
    Định mức Bỏ qua phần hướng dẫn này.
    Phạm vi OAuth được phép Bỏ qua phần hướng dẫn này.
  4. Trong phần tài nguyên API, hãy chọn proxy API mà bạn vừa tạo. Ví dụ: helloworld_apikey.
  5. Nhấp vào Thêm.
  6. Trong phần Đường dẫn, hãy thêm đường dẫn "/".
  7. Nhấp vào Thêm.
  8. Nhấp vào Lưu.

Trong các bước tiếp theo, bạn sẽ nhận được khóa API bắt buộc.

Thêm nhà phát triển và ứng dụng vào tổ chức của bạn

Tiếp theo, chúng tôi sẽ mô phỏng quy trình làm việc của một nhà phát triển đăng ký sử dụng các API của bạn. Nhà phát triển sẽ có một hoặc nhiều ứng dụng gọi API của bạn và mỗi ứng dụng sẽ nhận được một khóa API duy nhất. Nhờ đó, nhà cung cấp API có thể kiểm soát chi tiết hơn quyền truy cập vào API của bạn và báo cáo chi tiết hơn về lưu lượng truy cập API theo ứng dụng.

Tạo nhà phát triển

Cách tạo nhà phát triển:

  1. Chọn Xuất bản > Nhà phát triển trong menu.
  2. Nhấp vào + Nhà phát triển.
  3. Nhập nội dung sau vào cửa sổ Nhà phát triển mới:

    Trong trường này enter
    Tên Keyser
    Họ Soze
    Tên người dùng keyser
    Email keyser@example.com
  4. Nhấp vào Tạo.

Đăng ký ứng dụng

Để đăng ký ứng dụng dành cho nhà phát triển:

  1. Chọn Xuất bản > Ứng dụng.
  2. Nhấp vào + Ứng dụng.
  3. Nhập nội dung sau vào cửa sổ Ứng dụng mới:

    p
    Trong trường này làm điều này
    TênTên hiển thị Nhập: keyser_app
    Công ty / Nhà phát triển Chọn: Developer
    Nhà phát triển Chọn: Keyser Soze (keyser@example.com)
    URL gọi lạiGhi chú Để trống
  4. Trong phần Credentials (Thông tin xác thực), hãy chọn Never (Không bao giờ) trên trình đơn Expiry (Hết hạn). Thông tin đăng nhập cho ứng dụng này sẽ không bao giờ hết hạn.
  5. Trong phần Sản phẩm, hãy nhấp vào Thêm sản phẩm.
  6. Chọn helloworld_apikey-Product.
  7. Nhấp vào Thêm.
  8. Nhấp vào Tạo ở trên cùng bên phải của phần Chi tiết ứng dụng để lưu công việc của bạn.

Lấy khoá API

Cách lấy khoá API:

  1. Trên trang Ứng dụng (Xuất bản > Ứng dụng), hãy nhấp vào keyser_app.
  2. Trên trang keyser_app, hãy nhấp vào Show (Hiển thị) bên cạnh Key (Khoá) trong phần Credentials (Thông tin xác thực). Trong phần Product, hãy lưu ý rằng khoá này liên kết với helloworld_apikey

  3. Chọn và sao chép Khóa. Bạn sẽ sử dụng nó trong bước tiếp theo.

Gọi API bằng khoá

Giờ đây, khi đã có khoá API, bạn có thể sử dụng khoá này để gọi proxy API. Nhập nội dung sau vào trình duyệt web. Thay tên tổ chức Edge của bạn bằng ORG_NAME và khoá API cho API_KEY dưới đây. Hãy đảm bảo không có khoảng trống thừa trong tham số truy vấn.

http://ORG_NAME-test.apigee.net/helloapikey?apikey=API_KEY

Bây giờ, khi gọi đến proxy API, bạn sẽ nhận được phản hồi này: Hello, Guest!

Xin chúc mừng! Bạn đã tạo một proxy API và bảo vệ proxy này bằng cách yêu cầu bao gồm một khóa API hợp lệ trong lệnh gọi.

Lưu ý rằng nói chung, bạn không nên chuyển khóa API dưới dạng tham số truy vấn. Thay vào đó, bạn nên cân nhắc việc chuyển phương thức này trong tiêu đề HTTP.

Phương pháp hay nhất: Truyền khóa vào tiêu đề HTTP

Ở bước này, bạn sẽ sửa đổi proxy để tìm khoá API trong một tiêu đề có tên là x-apikey.

  1. Chỉnh sửa proxy API. Chọn Phát triển > Proxy API > helloworld_apikey và chuyển đến chế độ xem Phát triển.
  2. Chọn chính sách Verify API Key (Xác minh khoá API) và sửa đổi XML chính sách để cho biết chính sách này nên tìm trong header thay vì trong queryparam:

    <APIKey ref="request.header.x-apikey"/>
    
  3. Lưu proxy API để triển khai thay đổi.
  4. Thực hiện lệnh gọi API sau đây bằng cURL để chuyển khoá API dưới dạng tiêu đề có tên là x-apikey. Đừng quên thay thế tên tổ chức của bạn.

    curl -v -H "x-apikey: API_KEY" http://ORG_NAME-test.apigee.net/helloapikey
    

Xin lưu ý rằng để hoàn tất toàn bộ thay đổi, bạn cũng cần định cấu hình chính sáchassignMessage để xóa tiêu đề thay vì tham số truy vấn. Ví dụ:

<Remove>
<Headers>
    <Header name="x-apikey"/>
</Headers>
</Remove>

Chủ đề có liên quan

Dưới đây là một số chủ đề liên quan trực tiếp đến hướng dẫn này:

Tìm hiểu sâu hơn một chút về việc bảo vệ API bằng khoá API chỉ là một phần của quá trình. Thông thường, quy trình bảo vệ API sẽ liên quan đến tính bảo mật bổ sung như OAuth.

OAuth là một giao thức mở mà tóm tắt là trao đổi thông tin xác thực (như tên người dùng và mật khẩu) để lấy mã truy cập. Mã truy cập là các chuỗi dài, ngẫu nhiên, có thể được truyền xung quanh quy trình thông báo, ngay cả từ ứng dụng này sang ứng dụng khác mà không ảnh hưởng đến thông tin xác thực ban đầu. Mã thông báo truy cập thường có thời gian tồn tại ngắn, vì vậy mã thông báo truy cập mới luôn được tạo.