Cho phép truy cập vào mã thông báo OAuth 2.0 theo mã nhận dạng người dùng và mã ứng dụng

Edge for Private Cloud phiên bản 4.17.09

Tài liệu này mô tả cách bật tính năng truy xuất và thu hồi mã truy cập OAuth 2.0 bằng mã nhận dạng người dùng cuối, mã ứng dụng hoặc cả hai.

Hệ thống sẽ tự động thêm mã ứng dụng vào mã truy cập OAuth. Do đó, sau khi bạn sử dụng quy trình bên dưới để bật quyền truy cập vào mã thông báo cho một tổ chức, bạn có thể truy cập vào mã thông báo theo mã ứng dụng.

Để truy xuất và thu hồi mã truy cập OAuth 2.0 theo mã nhận dạng người dùng cuối, bạn phải có mã nhận dạng người dùng cuối trong mã truy cập. Quy trình dưới đây mô tả cách thêm mã nhận dạng người dùng cuối vào một mã thông báo hiện có hoặc sang mã thông báo mới.

Theo mặc định, khi Edge tạo mã truy cập OAuth 2.0, mã thông báo này sẽ có định dạng:

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Xin lưu ý những điều sau:

  • Trường application_name chứa mã nhận dạng duy nhất (UUID) của ứng dụng được liên kết với mã thông báo đó. Nếu bạn bật tính năng truy xuất và thu hồi của mã truy cập OAuth 2.0 theo mã ứng dụng, thì đây là mã ứng dụng mà bạn sử dụng.
  • Trường access_token chứa giá trị mã truy cập OAuth 2.0.

Để bật tính năng truy xuất và thu hồi mã truy cập OAuth 2.0 theo mã nhận dạng người dùng cuối, hãy định cấu hình Chính sách OAuth 2.0 để đưa mã nhận dạng người dùng vào mã thông báo theo mô tả trong quy trình bên dưới.

Mã nhận dạng người dùng cuối là chuỗi mà Edge sử dụng làm mã nhà phát triển, không phải là email của nhà phát triển của bạn. Bạn có thể xác định mã nhận dạng của nhà phát triển từ địa chỉ email của nhà phát triển bằng cách sử dụng nút Tải Lệnh gọi API dành cho nhà phát triển.

Sau khi bạn định cấu hình Edge để đưa mã nhận dạng người dùng cuối vào mã thông báo, mã này sẽ được đưa vào dưới dạng app_enduser, như được hiển thị dưới đây:

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "app_enduser" : "6ZG094fgnjNf02EK",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Các API để truy xuất và thu hồi Mã truy cập OAuth 2.0 theo mã nhận dạng người dùng và mã ứng dụng

Dùng các API sau để truy cập vào mã thông báo OAuth theo mã nhận dạng người dùng, mã ứng dụng hoặc cả hai:

Quy trình bật quyền truy cập vào mã thông báo

Sử dụng quy trình sau để bật tính năng truy xuất và thu hồi mã truy cập OAuth 2.0 bằng cách mã nhận dạng người dùng cuối và mã ứng dụng.

Bước 1: Bật tính năng hỗ trợ truy cập vào mã thông báo cho tổ chức

Bạn phải bật quyền truy cập vào mã thông báo cho từng tổ chức riêng biệt. Gọi API PUT bên dưới cho mỗi API tổ chức mà bạn muốn bật tính năng truy xuất và thu hồi mã truy cập OAuth 2.0 theo mã nhận dạng người dùng cuối hoặc mã ứng dụng.

Người dùng thực hiện cuộc gọi sau phải có vai trò quản trị viên tổ chức hoặc opsadmin cho tổ chức. Thay thế các giá trị trong {curly ngoặc nhọn} bằng các giá trị dành riêng cho tổ chức của bạn:

> curl -H "Content-type:text/xml" -X POST \
  https://<ms-ip>:8080/v1/organizations/{org_name} \
  -d '<Organization name="{org_name}">
      <Properties>
        <Property name="features.isOAuthRevokeEnabled">true</Property>
        <Property name="features.isOAuth2TokenSearchEnabled">true</Property>
      </Properties>
    </Organization>' \ 
  -u {userEmail}:{mypassword}

Bước 2: Đặt quyền cho vai trò opsadmin trong tổ chức

Chỉ vai trò quản trị viên tổ chứcquản trị viên hoạt động trong tổ chức phải được cấp quyền để truy xuất (HTTP GET) và thu hồi (HTTP PUT) mã thông báo OAuth 2.0 dựa trên theo mã nhận dạng người dùng hoặc mã ứng dụng. Để kiểm soát quyền truy cập, hãy thiết lập quyền và cấp quyền cho tài nguyên /oauth2 cho một tổ chức. Tài nguyên đó có URL ở dạng:

https://<ms-ip>:8080/v1/organizations/{org_name}/oauth2

Vai trò quản trị viên tổ chức phải có sẵn các quyền cần thiết. Đối với vai trò opsadmin đối với tài nguyên /oauth2, các quyền sẽ trông như thế nào sau:

<ResourcePermission path="/oauth2">
    <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
    </Permissions>
</ResourcePermission>

Bạn có thể sử dụng liên kết Lấy Quyền đối với lệnh gọi API tài nguyên đơn lẻ để xem vai trò nào có quyền đối với Tài nguyên /oauth2.

Dựa trên câu trả lời, bạn có thể sử dụng thao tác Thêm Quyền cấp cho Tài nguyên đối với một vai trò Xoá các lệnh gọi API quyền đối với tài nguyên để thực hiện mọi điều chỉnh cần thiết đối với /oauth2 quyền đối với tài nguyên.

Hãy dùng lệnh cURL sau để cấp cho vai trò opsadmin quyền nhậnput cho tài nguyên /oauth2. Thay thế các giá trị trong {curly labels} bằng các giá trị dành riêng cho tổ chức của bạn:

> curl -X POST -H 'Content-type:application/xml' \
  http://<ms-ip>:8080/v1/organizations/{org}/userroles/opsadmin/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
      </Permissions>
    </ResourcePermission>' \
  -u {USEREMAIL}:{PWD} 

Sử dụng lệnh cURL sau để thu hồi quyền nhậnđặt đối với tài nguyên /oauth2 khỏi các vai trò không phải là quản trị viên tổ chứcopsadmin. Thay thế các giá trị trong {curly ngoặc nhọn} bằng các giá trị dành riêng cho tổ chức của bạn:

> curl -X DELETE -H 'Content-type:application/xml' \
  http://<msip>:8080/v1/organizations/{org-name}/userroles/{roles}/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions></Permissions>
    </ResourcePermission>' \
   -u {USEREMAIL}:{PWD} 

Bước 3: Đặt thuộc tính oauth_max_search_limit

Đảm bảo rằng conf_keymanagement_oauth_max_search_limit trong /opt/apigee/customer/application/management-server.properties tệp được đặt thành 100:

conf_keymanagement_oauth_max_search_limit = 100

Nếu tệp này không tồn tại, hãy tạo tệp.

Tài sản này đặt kích thước trang được dùng khi tìm nạp mã thông báo. Apigee đề xuất giá trị là 100, nhưng bạn có thể thiết lập cho phù hợp.

Trên lần cài đặt mới, thuộc tính phải được đặt thành 100. Nếu phải thay đổi của thuộc tính này, hãy khởi động lại Máy chủ quản lý và Trình xử lý thư bằng cách sử dụng các lệnh:

> /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Bước 4: Định cấu hình chính sách OAuth 2.0 để tạo mã thông báo để bao gồm mã nhận dạng người dùng cuối

Định cấu hình chính sách OAuth 2.0 dùng để tạo mã truy cập nhằm đưa mã nhận dạng người dùng cuối vào mã thông báo. Khi đưa mã nhận dạng người dùng cuối vào mã truy cập, bạn có thể truy xuất và thu hồi mã thông báo bằng cách Mã nhận dạng.

Để định cấu hình chính sách nhằm đưa mã nhận dạng người dùng cuối vào mã truy cập, yêu cầu sẽ tạo mã truy cập phải bao gồm mã nhận dạng người dùng cuối và bạn phải chỉ định biến đầu vào chứa mã nhận dạng người dùng cuối.

Chính sách OAuth 2.0 dưới đây, có tên GenerateAccessTokenClient, tạo quyền truy cập OAuth 2.0 mã thông báo. Lưu ý việc thêm thẻ &lt;AppEndUser&gt; được in đậm để chỉ định biến chứa mã nhận dạng người dùng cuối:

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient">
    <DisplayName>OAuth 2.0.0 1</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>GenerateAccessToken</Operation>
    <SupportedGrantTypes>
         <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
    <GrantType>request.queryparam.grant_type</GrantType> 
    <AppEndUser>request.header.appuserID</AppEndUser> 
    <ExpiresIn>960000</ExpiresIn>
</OAuthV2>

Sau đó, bạn có thể dùng lệnh cURL sau để tạo mã truy cập OAuth 2.0, truyền mã nhận dạng người dùng là appuserID tiêu đề:

> curl -H "appuserID:6ZG094fgnjNf02EK" \
https://myorg-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials \
  -X POST \
  -d 'client_id=k3nJyFJIA3p62TKIkLO6OJNXFmP&client_secret=gk5K5lIp943AY4'

Trong ví dụ này, mã appuserID được chuyển dưới dạng tiêu đề yêu cầu. Bạn có thể chuyển thông tin trong yêu cầu theo nhiều cách. Cho ví dụ, bạn có thể:

  • Sử dụng biến thông số biểu mẫu: request.formparam.appuserID
  • Sử dụng một biến luồng để cung cấp mã nhận dạng người dùng cuối