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.
Chuyển đến tài liệu về Apigee X.
thông tin

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

Thông qua hướng dẫn này, bạn sẽ tìm hiểu cách:

  • Tạo proxy API yêu cầu khoá 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à bạn phải bảo vệ API của mình khỏi bị truy cập trái phép. Một cách để làm điều đó là sử dụng khoá API (còn gọi là khoá công khai, khoá người tiêu dùng hoặc khoá ứng dụng).

Khi một ứng dụng đưa ra yêu cầu đối với API của bạn, ứng dụng đó phải cung cấp khoá 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 với khoá API của sản phẩm API hiển thị tài nguyên được yêu cầu

Nếu khoá hợp lệ, yêu cầu sẽ được cho phép. Nếu khoá không hợp lệ, yêu cầu sẽ dẫn đến lỗi uỷ quyền.

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 đó.

Bạn cần có

  • Một tài khoản Apigee Edge. Nếu chưa có tài khoản này, bạn có thể đăng ký 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ề "mocktarget"

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

  1. Truy cập https://apigee.com/edge và đă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 của bạn ở đầu thanh điều hướng bên để hiển thị trình đơn hồ sơ người dùng, sau đó 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 proxy API.

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

    Đổi thành: /helloapikey

    Project Base Path 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 phần Tạo phiên bản trong sách điện tử Web API Design: The Missing Link (Thiết kế API web: Đường liên kết bị thiếu).

    API hiện tại

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

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

    Mô tả Nhập: hello world protected by API key
  7. Nhấp vào Tiếp theo.
  8. Trên trang CommonChính sách, đối với phần Bảo mật: Cấp quyền, hãy chọn Khoá 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 của bạn.
  9. Trên trang Virtual Hosts (Máy chủ ảo), hãy chọn default (mặc định) và secure (bảo mật), sau đó nhấp vào Next (Tiếp theo). Khi chọn mặc định, bạn có thể gọi API của mình bằng http://. Khi chọn chế độ bảo mật, bạn có thể gọi API của mình bằng https://.
  10. Trên trang Tóm tắt, hãy nhớ chọn môi trường triển khai kiểm thử, 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, đồng thời proxy API đã được triển khai đến môi trường kiểm thử của bạn.
  12. Nhấp vào Edit proxy (Chỉnh sửa proxy) để hiển thị trang Overview (Tổng quan) cho proxy API.

Xem chính sách

  1. Trong trình chỉnh sửa proxy API, nhấp vào thẻ Phát triển. Bạn sẽ thấy 2 chính sách đã được thêm vào quy trình 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).
    • Remove Query Param apikey (Xoá khoá API tham số truy vấn): Chính sách composeMessage sẽ xoá khoá API sau khi khoá kiểm tra để khoá này không bị truyền đi và hiển thị một cách không cần thiết.
  2. Nhấp vào biểu tượng chính sách Xác minh khoá API trong chế độ xem quy trình và xem cấu hình XML của chính sách ở chế độ xem mã thấp hơn. Phần tử <APIKey> cho chính sách biết nơi cần tìm khoá API khi thực hiện lệnh gọi. Theo mặc định, trình phân tích này 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 một lệnh gọi API thành công trực tiếp đến dịch vụ mục tiêu. Sau đó, bạn sẽ thực hiện một lệnh gọi không thành công tới proxy API để xem proxy đang được bảo vệ như thế nào trong các chính sách.

  1. Thành công

    Trong trình duyệt web, hãy truy cập vào đị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 tới, nhưng hiện tại bạn sẽ thực hiện truy cập trực tiếp vào dịch vụ đó:

    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:

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

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

    Nếu không có chính sách Xác minh khoá API, lệnh gọi này sẽ cung cấp 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 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 truyề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 sản phẩm API

Cách thêm sản phẩm API bằng giao diện người dùng Apigee:

  1. Chọn Publish > API Products (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 của bạn.

    Trường Nội dung mô tả
    Tên Tên nội bộ của sản phẩm API. Đừng chỉ định 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ị cho 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 này bất cứ lúc nào. Nếu bạn không chỉ định, thì Giá trị tên sẽ được sử dụng. Trường này được tự động điền bằng giá trị Tên; bạn có thể chỉnh sửa hoặc xoá nội dung của trường. Tên hiển thị có thể chứa các ký tự đặc biệt. Ví dụ: helloworld_apikey-Product
    Nội dung mô tả Nội dung mô tả về 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 sẽ 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 các yêu cầu cấp quyền truy cập Bật tính năng tự động phê duyệt các yêu cầu chính cho sản phẩm API này từ bất kỳ ứng dụng nào.
    Hạn mức Bỏ qua đối với hướng dẫn này.
    Phạm vi OAuth được phép Bỏ qua đối với hướng dẫn này.
  4. Trong phần tài nguyên API, hãy chọn proxy API 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 khoá API cần thiết.

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 ta 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 API của bạn. Nhà phát triển sẽ có một hoặc nhiều ứng dụng gọi các API và mỗi ứng dụng sẽ nhận được một khoá API duy nhất. Với vai trò là nhà cung cấp API, bạn sẽ có quyền kiểm soát chi tiết hơn đối với quyền truy cập vào API 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 Publish > Developers (Xuất bản > Nhà phát triển) trong trình đơn.
  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

Cách đăng ký ứng dụng của 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ổ New App (Ứng dụng mới):

    p
    Trong trường này thực hiện thao tác 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 Thông tin xác thực, hãy chọn Không bao giờ trên trình đơn Hết hạn. Thông tin đăng nhập của ứ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 ở phía trên và ở bên phải phần Chi tiết ứng dụng để lưu công việc của bạn.

Lấy khoá API

Cách tải 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 Hiển thị bên cạnh Khoá trong phần Thông tin xác thực. Trong phần Product, hãy lưu ý rằng khoá này được liên kết với helloworld_apikey

    .
  3. Chọn và sao chép Key (Khoá). Bạn sẽ dùng chỉ mục này trong bước tiếp theo.

Gọi API bằng khoá

Giờ đây khi đã có khoá API, bạn có thể dùng khoá đó để gọi proxy API. Nhập nội dung sau vào trình duyệt web của bạn. Thay thế tên tổ chức của bạn trên Edge bằng ORG_NAME và thay thế khoá API cho API_KEY ở bên dưới. Đả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

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

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

Xin lưu ý rằng nhìn chung, bạn không nên truyền khoá API làm tham số truy vấn. Bạn nên cân nhắc việc chuyển mã đó vào tiêu đề HTTP.

Phương pháp hay nhất: Chuyển khoá vào tiêu đề HTTP

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

  1. Chỉnh sửa proxy API. Chọn Phát triển > Proxies API > helloworld_apikey rồi chuyển đến chế độ xem Develop (Phát triển).
  2. Chọn chính sách Xác minh khoá API và sửa đổi XML của chính sách để yêu cầu chính sách xem 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 để truyề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 đầy đủ cho thay đổi, bạn cũng cần định cấu hình chính sách AttributionMessage để xoá 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ủ đề có liên quan trực tiếp đến hướng dẫn này:

Đi sâu hơn một chút, việc bảo vệ API bằng khoá API mới chỉ là một phần của câu chuyện. Thông thường, biện pháp bảo vệ API liên quan đến các biện pháp bảo mật bổ sung, chẳng hạn như OAuth.

OAuth là một giao thức mở, nói tóm lại là sẽ trao đổi thông tin xác thực (như tên người dùng và mật khẩu) cho các 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 một quy trình thông báo, ngay cả giữa các ứng dụng mà không ảnh hưởng đến thông tin xác thực ban đầu. Mã truy cập thường có vòng đời ngắn, vì vậy, mã mới luôn được tạo.