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.05

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 để cấp 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 bằng mã nhận dạng người dùng cuối, phải có mã 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ã 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ã 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 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 bằng 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 dưới đây.

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, chứ không phải địa chỉ email của nhà phát triển. Bạn có thể xác định mã 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 API 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 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"
}

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ã nhận dạng ứ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 mã thông báo

Hãy sử dụng quy trình sau để cho phép 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ợ 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 mã thông báo riêng cho từng tổ chức. Gọi API PUT bên dưới cho mỗi 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 đây phải giữ vai trò orgadmin hoặc opsadmin (quản trị viên hoạt động) đối với tổ chức. Thay thế các giá trị trong {curly bitmap} 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: Thiết lập quyền cho vai trò quản trị viên hoạt động trong tổ chức

Chỉ những vai trò orgadminopsadmin mới được cấp quyền truy xuất (HTTP GET) và thu hồi mã thông báo OAuth 2.0 (HTTP PUT) dựa trên 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 tính năng nhận và đặt quyền trong 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 (quản trị viên hoạt động) đối với 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 Get Permissions for a Single Resource API (Lấy quyền cho một 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 phản hồi, bạn có thể sử dụng lệnh gọi Thêm quyền cho tài nguyên vào vai trò và lệnh gọi API 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 để cấp cho vai trò opsadmin quyền nhậnđặt đối với tài nguyên /OAuth2. Thay thế các giá trị trong {curly dấu ngoặc nhọn} bằng 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 đối với tài nguyên /OAuth2 khỏi các vai trò không phải orgadminopsadmin. Thay thế các giá trị trong {curly bitmap} 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 đặt giá trị cho thuộc tính conf_keymanagement_oauth_max_search_limit trong tệp conf_keymanagement_oauth_max_search_limit 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ị 100, nhưng bạn có thể đặt giá trị này nếu thấy phù hợp.

Trong lần 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ông báo bằng cách 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 giúp tạo mã thông báo để thê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. Bằng cách đư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ã theo 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 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 dữ liệu đầ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 là GenerateAccessTokenClient, sẽ tạo mã truy cập OAuth 2.0. Xin lưu ý rằng việc thêm thẻ <AppEndUser> đượ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 đây để tạo mã truy cập OAuth 2.0, chuyể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, hệ thống sẽ chuyển appuserID dưới dạng tiêu đề của yêu cầu. Bạn có thể chuyển thông tin dưới dạng một phần của yêu cầu theo nhiều cách. Ví dụ: thay vào đó, bạn có thể:

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