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 v. 4.17.01

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 theo mã nhận dạng người dùng cuối, mã ứng dụng hoặc cả hai.

Mã ứng dụng sẽ tự động được thêm vào mã truy cập OAuth. Do đó, sau khi làm theo quy trình dưới đây để 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, mã nhận dạng người dùng cuối phải có trong mã truy cập. Quy trình bên dưới mô tả cách thêm mã nhận dạng người dùng cuối vào mã thông báo hiện có hoặc vào mã thông báo mới.

Theo mặc định, khi Edge tạo mã truy cập OAuth 2.0, mã 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 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.

Để cho phép 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, như 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ận dạng nhà phát triển, chứ không phải địa chỉ email của nhà phát triể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 lệnh gọi Get Developer API.

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ã đó sẽ được đưa vào trường app_enduser, như minh hoạ 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"
}

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

Sử 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

Hãy 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 theo 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ợ quyền truy cập mã thông báo cho một 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 từng 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 lệnh gọi sau phải có vai trò là orgadmin hoặc opsadmin cho tổ chức. Thay thế các giá trị trong {curly vitals} 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ỉ các vai trò orgadminopsadmin trong một tổ chức mớ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 mã nhận dạng người dùng hoặc mã nhận dạng ứng dụng. Để kiểm soát quyền truy cập, hãy đặt quyền lấy và đặt trên 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ò orgadmin phải có các quyền cần thiết. Đối với vai trò opsadmin cho tài nguyên /oauth2, các quyền sẽ có dạng như sau:

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

Bạn có thể sử dụng lệnh gọi Nhận quyền cho một API tài nguyên đơn để xem vai trò nào có quyền đối với tài nguyên /oauth2.

Dựa trên phản hồi, bạn có thể sử dụng các lệnh gọi API Thêm quyền đối với tài nguyên vào vai trò Xoá 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 quyền đối với tài nguyên /oauth2.

Sử dụng lệnh cURL sau đây để cấp cho vai trò opsadmin quyền get (lấy) và put (đặt) cho tài nguyên /oauth2. Thay thế các giá trị trong {curly Nest} 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 getput cho tài nguyên /oauth2 từ các vai trò khác ngoài orgadminopsadmin. Thay thế các giá trị trong {curly braces} 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 thuộc tính conf_keymanagement_oauth_max_search_limit trong tệp /opt/apigee/customer/application/management-server.properties đượ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ể đặt giá trị này theo ý mình.

Trên một lượt cài đặt mới, thuộc tính này phải được đặt thành 100. Nếu bạn phải thay đổi giá trị 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 để đưa mã nhận dạng người dùng cuối vào mã thông báo. Bằng cách đưa mã nhận dạng người dùng cuối vào mã thông báo truy cập, bạn có thể truy xuất và thu hồi mã thông báo theo mã nhận dạng.

Để định cấu hình chính sách bao gồm mã nhận dạng người dùng cuối trong mã truy cập, yêu cầu 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 bên dưới, có tên là GenerateAccessTokenClient, sẽ tạo một mã truy cập OAuth 2.0. Lưu ý việc thêm thẻ <AppEndUser> 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ể sử 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 dưới dạng tiêu đề appuserID:

> 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, appuserID được truyền dưới dạng tiêu đề yêu cầu. Bạn có thể truyền thông tin trong một yêu cầu theo nhiều cách. Ví dụ: bạn có thể:

  • Sử dụng biến tham số biểu mẫu: request.formparam.appuserID
  • Sử dụng biến flow cung cấp mã nhận dạng người dùng cuối