Sử dụng OAuth2 để truy cập API Edge

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Apigee Edge cho phép bạn thực hiện các lệnh gọi API Edge được xác thực bằng mã thông báo OAuth2. Theo mặc định, tính năng hỗ trợ OAuth2 sẽ được bật trên Edge cho các tài khoản Cloud. Nếu bạn đang sử dụng Edge đối với Đám mây riêng tư, bạn không thể sử dụng OAuth2 nếu không có thiết lập SAML hoặc Giao thức truy cập thư mục hạng nhẹ (LDAP).

Cách hoạt động của OAuth2 (với API Apigee Edge)

Các lệnh gọi đến API Apigee Edge yêu cầu xác thực để chúng tôi có thể chắc chắn rằng bạn chính bạn. Để xác thực bạn, chúng tôi đòi hỏi bạn phải gửi mã truy cập OAuth2 cùng với yêu cầu của bạn để truy cập API.

Ví dụ: nếu muốn lấy thông tin chi tiết về một tổ chức trên Edge, bạn sẽ gửi yêu cầu tới một URL như sau:

https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

Tuy nhiên, bạn không thể gửi yêu cầu đó mà không cho chúng tôi biết bạn là ai. Nếu không, bất kỳ ai có thể xem thông tin chi tiết về tổ chức của bạn.

Đây là nơi OAuth2 hoạt động: để xác thực bạn, chúng tôi cần bạn gửi cho chúng tôi mã truy cập trong yêu cầu đó. Mã truy cập cho chúng tôi biết bạn là ai để chúng tôi có thể đảm bảo rằng bạn được phép xem thông tin chi tiết về tổ chức.

Rất may là bạn có thể nhận mã thông báo bằng cách gửi thông tin đăng nhập của mình đến dịch vụ OAuth2 của Edge. Chiến lược phát hành đĩa đơn dịch vụ sẽ phản hồi bằng mã truy cập và mã làm mới.

Quy trình OAuth2: Yêu cầu ban đầu

Hình ảnh sau đây minh hoạ quy trình OAuth2 khi bạn truy cập vào API Edge lần đầu tiên thời gian:

Quy trình OAuth: Yêu cầu đầu tiên
Hình 1: Quy trình OAuth: Yêu cầu đầu tiên

Như Hình 1 cho thấy, khi bạn đưa ra yêu cầu ban đầu tới API Edge:

  1. Bạn yêu cầu một mã truy cập. Bạn có thể thực hiện việc này bằng Edge API, acurl hoặc get_token. Ví dụ:
    get_token
    Enter username:
    ahamilton@apigee.com
    Enter the password for user 'ahamilton@apigee.com'
    [hidden input]
    Enter the six-digit code if 'ahamilton@apigee.com' is MFA enabled or press ENTER:
    123456
  2. Dịch vụ OAuth2 của Edge phản hồi bằng một mã truy cập và in mã đó vào stdout; ví dụ:
    Dy42bGciOiJSUzI1NiJ9.eyJqdGkiOiJhM2YwNjA5ZC1lZTIxLTQ1YjAtOGQyMi04MTQ0MTYxNjNhNTMiLCJz
    AJpdGUiLCJhcHByb3ZhbHMubWUiLCJvYXV0aC5hcHByb3ZhbHMiXSwiY2xpZW50X2lkIjoiZWRnZWNsaSIsIm
    NjbGkiLCJhenAiOiJlZGdlY2xpIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjJkMWU3NDI
    GzQyMC1kYzgxLTQzMDQtOTM4ZS1hOGNmNmVlODZhNzkiLCJzY29wZSI6WyJzY2ltLm1lIiwib3BlbmlkIiwic
    ENC05MzhlLWE4Y2Y2ZWU4NmE3OSIsIm9yaWdpbiI6InVzZXJncmlkIiwidXNlcl9uYW1lIjoiZGFuZ2VyNDI0
    RI6ImUyNTM2NWQyIiwiaWF0IjoxNTI4OTE2NDA5LCJleHAiOjE1Mjg5MTgyMDksImlzcyI6Imh0dHBzOi8vbG
    420iLCJlbWFpbCI6ImRhbmdlcjQyNDJAeWFob28uY29tIiwiYXV0aF90aW1lIjoxNTI4OTE2NDA5LCJhbCI6M
    2lLmNvbSIsInppZCI6InVhYSIsImF1ZCI6WyJlZGdlY2xpIiwic2NpbSIsIm9wZW5pZCIsInBhc3N3b3JkIiw

    Các tiện ích acurlget_token tự động lưu quyền truy cập và mã làm mới thành ~/.sso-cli (Mã làm mới không được ghi vào stdout.) Nếu sử dụng dịch vụ OAuth2 của Edge để lấy mã thông báo, bạn cần lưu mã cho sau này sử dụng chính bạn.

  3. Bạn gửi yêu cầu tới API Edge bằng mã truy cập. acurl tệp đính kèm mã thông báo; ví dụ:
    acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

    Nếu bạn sử dụng một ứng dụng HTTP khác, hãy nhớ thêm mã truy cập. Ví dụ:

    curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
      -H "Authorization: Bearer ACCESS_TOKEN"
  4. Edge API thực thi yêu cầu của bạn và thường trả về phản hồi có dữ liệu.

Quy trình OAuth2: Yêu cầu tiếp theo

Trong các yêu cầu tiếp theo, bạn không cần phải đổi thông tin đăng nhập để lấy mã thông báo. Thay vào đó, bạn chỉ cần cung cấp mã truy cập mà bạn đã có, miễn là mã đó chưa hết hạn:

Quy trình OAuth: Các yêu cầu tiếp theo
Hình 2: Luồng OAuth: Các yêu cầu tiếp theo

Như Hình 2 cho thấy, khi bạn đã có mã truy cập:

  1. Bạn gửi yêu cầu tới API Edge bằng mã truy cập. acurl tệp đính kèm mã thông báo. Nếu sử dụng các công cụ khác, bạn sẽ phải thêm mã thông báo theo cách thủ công.
  2. Edge API thực thi yêu cầu của bạn và thường trả về phản hồi có dữ liệu.

Quy trình OAuth2: Khi mã truy cập của bạn hết hạn

Khi mã truy cập hết hạn (sau 12 giờ), bạn có thể sử dụng mã làm mới để nhận mã truy cập:

Quy trình OAuth: Làm mới mã truy cập
Hình 3: Quy trình OAuth: Làm mới mã truy cập

Như Hình 3 cho thấy, khi mã truy cập của bạn hết hạn:

  1. Bạn gửi yêu cầu đến API Edge, nhưng mã truy cập của bạn đã hết hạn.
  2. Edge API sẽ từ chối yêu cầu của bạn là trái phép.
  3. Bạn gửi mã làm mới cho dịch vụ OAuth2 của Edge. Nếu bạn đang sử dụng acurl, thì quá trình này đã hoàn tất tự động cho bạn.
  4. Dịch vụ OAuth2 của Edge sẽ phản hồi bằng một mã truy cập mới.
  5. Bạn gửi yêu cầu tới API Edge bằng mã truy cập mới.
  6. Edge API thực thi yêu cầu của bạn và thường trả về phản hồi có dữ liệu.

Nhận mã thông báo

Để nhận mã truy cập mà bạn có thể gửi tới API Edge, bạn có thể sử dụng các cách sau Các tiện ích của Apigee, ngoài những tiện ích như curl:

  • Tiện ích get_token: Trao đổi thông tin đăng nhập Apigee của bạn để truy cập và làm mới mã thông báo mà bạn có thể dùng để gọi API Edge.
  • Tiện ích acurl: Cung cấp một trình bao bọc tiện lợi xung quanh một tiêu chuẩn Lệnh curl. Tạo các yêu cầu HTTP đến Edge API, nhận mã truy cập và làm mới từ get_token, đồng thời chuyển mã truy cập đến API Edge.
  • Điểm cuối mã thông báo trong dịch vụ OAuth2 của Edge: Trao đổi Thông tin đăng nhập Apigee để truy cập và làm mới mã thông báo thông qua lệnh gọi đến API Edge.

Những phần mềm tiện ích này trao đổi thông tin đăng nhập vào tài khoản Apigee của bạn (địa chỉ email và mật khẩu) cho mã thông báo có các thời hạn sau:

  • Mã truy cập sẽ hết hạn sau 12 giờ.
  • Mã làm mới sẽ hết hạn sau 30 ngày.

Do đó, sau khi thực hiện thành công lệnh gọi API bằng acurl hoặc get_token, bạn có thể tiếp tục sử dụng cặp mã thông báo này trong 30 ngày. Sau khi hết hạn, bạn phải nhập lại thông tin xác thực và nhận mã thông báo mới.

Truy cập API Edge bằng OAuth2

Để truy cập vào Edge API, bạn cần gửi yêu cầu đến một điểm cuối API và cung cấp mã truy cập. Bạn có thể thực hiện việc này với bất kỳ ứng dụng HTTP nào, bao gồm cả tiện ích dòng lệnh như curl, giao diện người dùng dựa trên trình duyệt như Postman hoặc tiện ích Apigee như acurl.

Cách truy cập vào Edge API bằng acurlcurl được mô tả trong các phần tiếp theo.

Sử dụng acurl

Để truy cập vào API Edge bằng acurl, yêu cầu ban đầu của bạn phải bao gồm thông tin xác thực. Dịch vụ OAuth2 của Edge sẽ phản hồi bằng mã truy cập và mã làm mới. acurl sẽ lưu mã thông báo trên thiết bị.

Trong các yêu cầu tiếp theo, acurl dùng mã thông báo đã lưu trong ~/.sso-cli để bạn không phải cung cấp lại thông tin đăng nhập cho đến khi mã thông báo hết hạn.

Ví dụ sau đây cho thấy một yêu cầu acurl ban đầu lấy thông tin chi tiết về "ahamilton-eval" tổ chức:

acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -u ahamilton@apigee.com
Enter the password for user 'ahamilton@apigee.com'
[hidden input]
Enter the six-digit code (no spaces) if 'ahamilton@apigee.com' is MFA-enabled or press ENTER:
1a2b3c
{
  "createdAt" : 1491854501264,
  "createdBy" : "noreply_iops@apigee.com",
  "displayName" : "ahamilton",
  "environments" : [ "prod", "test" ],
  "lastModifiedAt" : 1491854501264,
  "lastModifiedBy" : "noreply_iops@apigee.com",
  "name" : "ahamilton",
  "properties" : {
    "property" : [ {
      "name" : "features.isSmbOrganization",
      "value" : "false"
    }, {
      "name" : "features.isCpsEnabled",
      "value" : "true"
    } ]
  },
  "type" : "trial"
}

acurl https://api.enterprise.apigee.com/v1/o/ahamilton-eval/apis/helloworld/revisions/1/policies

[ "SOAP-Message-Validation-1", "Spike-Arrest-1", "XML-to-JSON-1" ]

Ngoài việc lấy thông tin chi tiết về tổ chức, ví dụ này cũng cho thấy yêu cầu thứ hai tải danh sách các chính sách trong "helloworld" Proxy API. Yêu cầu thứ hai sử dụng rút ngắn "o" cho "tổ chức" trong URL.

Xin lưu ý rằng acurl tự động chuyển mã truy cập trong yêu cầu thứ hai. Bạn không cần truyền thông tin đăng nhập của người dùng sau khi acurl lưu trữ mã thông báo OAuth2. Nó sẽ nhận mã thông báo từ ~/.sso-cli cho các lệnh gọi tiếp theo.

Để biết thêm thông tin, hãy xem phần Sử dụng acurl để truy cập vào API Edge.

Dùng cuộn tròn

Bạn có thể dùng curl để truy cập vào API Edge. Để làm được điều này, trước tiên bạn phải tải truy cập và làm mới mã. Bạn có thể tải những thông tin này bằng một tiện ích như get_token hoặc Dịch vụ OAuth2 cạnh tranh..

Sau khi lưu thành công mã truy cập, bạn chuyển mã đó vào Tiêu đề Authorization của các lệnh gọi đến Edge API, như ví dụ sau cho thấy:

curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -H "Authorization: Bearer ACCESS_TOKEN"

Mã truy cập có hiệu lực trong 12 giờ kể từ khi được phát hành. Sau khi mã truy cập hết hạn, bạn có thể sử dụng mã làm mới trong 30 ngày để cấp một mã truy cập khác mà không cần thông tin đăng nhập. Apigee chỉ nên yêu cầu mã truy cập mới sau khi mã giới thiệu hết hạn, thay vì nhập thông tin đăng nhập và thực hiện một yêu cầu mới với mỗi lệnh gọi API.

Thời hạn của mã thông báo

Sau khi mã truy cập hết hạn, bạn có thể sử dụng mã này để nhận mã truy cập mới mà không cần bạn phải gửi lại thông tin đăng nhập của mình.

Cách làm mới mã truy cập tuỳ thuộc vào công cụ bạn đang sử dụng:

  • acurl: Bạn không cần làm gì cả. acurl tự động làm mới mã truy cập khi bạn gửi một yêu cầu chứa một yêu cầu đã lỗi thời.
  • get_token: Gọi get_token để làm mới mã truy cập.
  • Dịch vụ OAuth2 cạnh tranh: Gửi yêu cầu bao gồm:
    • Làm mới mã thông báo
    • Đã đặt thông số biểu mẫu grant_type thành "refresh_token"

OAuth2 cho người dùng máy

Bạn có thể dùng các tiện ích acurlget_token để viết tập lệnh cho quyền truy cập tự động sang API Edge có xác thực OAuth2 cho người dùng máy. Ví dụ sau đây trình bày cách sử dụng get_token để yêu cầu mã truy cập rồi thêm giá trị mã thông báo vào lệnh gọi curl:

  USER=me@example.com
  PASS=not-that-secret
  TOKEN=$(get_token -u $USER:$PASS -m '')
  curl -H "Authorization: Bearer $TOKEN" 'https://api.enterprise.apigee.com/v1/organizations/...'

Ngoài ra, bạn có thể kết hợp yêu cầu mã thông báo và lệnh gọi curl bằng tiện ích acurl. Ví dụ:

  USER=me@example.com
  PASS=not-that-secret
  acurl -u $USER:$PASS -m '' 'https://api.enterprise.apigee.com/v1/organizations/...'
  

Trong cả hai ví dụ, việc đặt giá trị của -m thành chuỗi trống sẽ ngăn người dùng máy khi được nhắc nhập mã MFA.