Yêu cầu mã thông báo truy cập và mã uỷ quyền

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

Trong chủ đề này, chúng tôi sẽ hướng dẫn bạn cách yêu cầu mã truy cập và mã uỷ quyền, định cấu hình Điểm cuối OAuth 2.0 và định cấu hình chính sách cho mỗi lần cấp được hỗ trợ .

Mã mẫu

Để thuận tiện cho bạn, bạn có thể xem các chính sách và điểm cuối được thảo luận trong chủ đề này trên GitHub trong dự án oauth-doc-examples trong kho lưu trữ mẫu api-platform-samples của Apigee. Bạn có thể triển khai mã mẫu và thử các yêu cầu mẫu được trình bày trong chủ đề này. Hãy xem dự án README để biết chi tiết.

Yêu cầu mã truy cập: loại cấp mã uỷ quyền

Phần này giải thích cách yêu cầu mã truy cập bằng loại cấp mã uỷ quyền luồng. Để xem giới thiệu về các loại quyền sử dụng OAuth 2.0, hãy xem phần Giới thiệu về OAuth 2.0.

Mẫu yêu cầu

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
   -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
   -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
   -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'

Bắt buộc tham số

Theo mặc định, các tham số này phải là x-www-form-urlencoded và được chỉ định trong nội dung yêu cầu (như trong mẫu ở trên); Tuy nhiên, bạn có thể thay đổi mặc định này bằng cách định cấu hình <GrantType>, <Code><RedirectUri> phần tử trong chính sách OAuthV2 được đính kèm với chính sách này /accesstoken. Để biết thông tin chi tiết, hãy xem Chính sách về OAuthV2.

  • grant_type – Phải được đặt thành giá trị authorization_code.
  • – Mã uỷ quyền nhận được từ /authorize điểm cuối (hoặc bất kỳ điểm cuối nào bạn chọn đặt tên). Cách yêu cầu mã truy cập trong quy trình uỷ quyền loại cấp mã, trước tiên, bạn phải có được mã uỷ quyền. Xem phần Yêu cầu mã uỷ quyền bên dưới. Xem thêm bài viết Triển khai loại cấp mã uỷ quyền.
  • redirect_uri – Bạn phải cung cấp tham số này nếu Tham số redirect_uri đã được đưa vào yêu cầu mã uỷ quyền trước đó. Nếu thông số redirect_uri không được đưa vào yêu cầu mã uỷ quyền và nếu bạn không cung cấp tham số này, thì chính sách này sẽ sử dụng giá trị của URL gọi lại được cung cấp khi ứng dụng của nhà phát triển được đăng ký.

Không bắt buộc tham số

  • trạng thái – Chuỗi sẽ được gửi lại cùng với phản hồi. Thường dùng để ngăn chặn các cuộc tấn công giả mạo yêu cầu trên nhiều trang web.
  • phạm vi – Cho phép bạn lọc danh sách các sản phẩm API mà có thể sử dụng mã thông báo đã tạo. Để biết thông tin chi tiết về phạm vi, hãy xem bài viết Làm việc với phạm vi OAuth2.

Xác thực

Bạn phải chuyển ID ứng dụng khách và Mật khẩu ứng dụng khách dưới dạng tiêu đề Xác thực cơ bản (Được mã hoá base64) hoặc dưới dạng tham số mẫu client_idclient_secret. Bạn lấy các giá trị này từ một ứng dụng của nhà phát triển đã đăng ký. Xem thêm "Mã hóa cơ bản thông tin xác thực".

Điểm cuối mẫu

Dưới đây là cấu hình điểm cuối mẫu để tạo mã truy cập. Thao tác này sẽ thực thi Chính sách generateAccessToken. Bạn phải định cấu hình chính sách này để hỗ trợ việc cấp bộ mã_uỷ quyền loại.

...
       <Flow name="generate-access-token">
            <Description>Generate a token</Description>
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Chính sách mẫu

Đây là một chính sách GenerateAccessToken cơ bản được định cấu hình để chấp nhận Loại cấp quyền authorization_code. Để biết thông tin về các phần tử cấu hình tuỳ chọn mà bạn có thể định cấu hình bằng chính sách này, hãy xem chính sách OAuthV2.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn>
    <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn>
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Trả về

Khi bật <GenerateResponse>, chính sách sẽ trả về phản hồi JSON mà bao gồm mã truy cập, như minh hoạ dưới đây. Loại cấp quyền authorization_code sẽ tạo mã truy cập và mã làm mới, vì vậy, phản hồi có thể có dạng như sau:

{
    "issued_at": "1420262924658",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420262924658",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi",
    "organization_name": "docs",
    "refresh_token_expires_in": "86399", //--in seconds
    "refresh_count": "0"
}

Nếu bạn đặt <GenerateResponse> thành false, chính sách sẽ không trả về của bạn. Thay vào đó, phương thức này điền dữ liệu liên quan đến tập hợp các biến luồng sau đây cấp mã truy cập.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Ví dụ:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

Yêu cầu mã truy cập: ứng dụng loại cấp thông tin xác thực

Phần này giải thích cách yêu cầu mã truy cập bằng loại cấp thông tin xác thực ứng dụng luồng. Để xem giới thiệu về các loại quyền sử dụng OAuth 2.0, hãy xem phần Giới thiệu về OAuth 2.0.

Mẫu yêu cầu

Để biết thông tin về cách mã hoá tiêu đề xác thực cơ bản trong lệnh gọi tiếp theo, hãy xem "Mã hoá thông tin xác thực cơ bản".

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHoAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Bắt buộc tham số

Theo mặc định, thông số allowed_type bắt buộc phải là x-www-form-urlencoded và được chỉ định trong nội dung yêu cầu (như trong mẫu ở trên); tuy nhiên, bạn có thể thay đổi chế độ mặc định này bằng cách định cấu hình phần tử <GrantType> trong chính sách OAuthV2 được gắn với điểm cuối /accesstoken này. Ví dụ: bạn có thể chọn truyền trong một tham số truy vấn. Để biết thông tin chi tiết, hãy xem Chính sách về OAuthV2.

  • grant_type – Phải được đặt thành giá trị client_credentials.

Không bắt buộc tham số

  • trạng thái – Chuỗi sẽ được gửi lại cùng với phản hồi. Thường dùng để ngăn chặn các cuộc tấn công giả mạo yêu cầu trên nhiều trang web.
  • phạm vi – Cho phép bạn lọc danh sách các sản phẩm API mà có thể sử dụng mã thông báo đã tạo. Để biết thông tin chi tiết về phạm vi, hãy xem bài viết Làm việc với phạm vi OAuth2.

Xác thực

Bạn phải chuyển ID ứng dụng khách và Mật khẩu ứng dụng khách dưới dạng tiêu đề Xác thực cơ bản (Được mã hoá base64) hoặc dưới dạng tham số mẫu client_idclient_secret. Bạn lấy các giá trị này từ ứng dụng của nhà phát triển đã đăng ký liên quan đến yêu cầu. Xem thêm "Xác thực cơ bản mã hoá bằng chứng xác thực".

Điểm cuối mẫu

Dưới đây là cấu hình điểm cuối mẫu để tạo mã truy cập. Thao tác này sẽ thực thi Chính sách GenerateAccessToken phải được định cấu hình để hỗ trợ việc cấp thông tin client_credentials loại.

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Chính sách mẫu

Đây là một chính sách GenerateAccessToken cơ bản được định cấu hình để chấp nhận Loại cấp quyền client_credentials. Để biết thông tin về các phần tử cấu hình tuỳ chọn mà bạn có thể định cấu hình bằng chính sách này, hãy xem chính sách OAuthV2.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <SupportedGrantTypes>
      <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Trả về

Khi bật <GenerateResponse>, chính sách sẽ trả về phản hồi JSON. Ghi chú với loại cấp client_credentials, mã làm mới không được hỗ trợ. Chỉ mã truy cập đã được tạo. Ví dụ:

{
    "issued_at": "1420260525643",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav",
    "organization_name": "docs"
}

Nếu bạn đặt <GenerateResponse> thành false, chính sách sẽ không trả về của bạn. Thay vào đó, phương thức này điền dữ liệu liên quan đến tập hợp các biến luồng sau đây cấp mã truy cập.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds

Ví dụ:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in     //--in seconds

Yêu cầu mã truy cập: loại cấp mật khẩu

Phần này giải thích cách yêu cầu mã truy cập bằng mật khẩu của chủ sở hữu tài nguyên quy trình cấp thông tin xác thực (mật khẩu). Để xem giới thiệu về các loại cấp quyền OAuth 2.0, hãy xem Giới thiệu về OAuth 2.0.

Để biết thêm thông tin về hình thức cấp mật khẩu, bao gồm một video dài 4 phút hướng dẫn cách triển khai mật khẩu đó, hãy xem phần Triển khai mật khẩu loại tài trợ.

Mẫu yêu cầu

Để biết thông tin về cách mã hoá tiêu đề xác thực cơ bản trong lệnh gọi tiếp theo, hãy xem "Mã hoá thông tin xác thực cơ bản".

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST https://docs-test.apigee.net/oauth/token \
  -d 'grant_type=password&username=the-user-name&password=the-users-password'

Bắt buộc tham số

Theo mặc định, các tham số này phải là x-www-form-urlencoded và được chỉ định trong nội dung yêu cầu (như trong mẫu ở trên); Tuy nhiên, bạn có thể thay đổi mặc định này bằng cách định cấu hình <GrantType>, <Username><Password> phần tử trong chính sách OAuthV2 được đính kèm với chính sách này /token. Để biết thông tin chi tiết, hãy xem Chính sách về OAuthV2.

Thông tin xác thực người dùng thường được xác thực dựa trên kho lưu trữ thông tin xác thực bằng giao thức truy cập thư mục hạng nhẹ (LDAP) hoặc Chính sách JavaScript.

  • grant_type – Phải được đặt thành giá trị password.
  • tên người dùng – Tên người dùng của chủ sở hữu tài nguyên.
  • password (mật khẩu) – Mật khẩu của chủ sở hữu tài nguyên.

Không bắt buộc tham số

  • trạng thái – Chuỗi sẽ được gửi lại cùng với phản hồi. Thường dùng để ngăn chặn các cuộc tấn công giả mạo yêu cầu trên nhiều trang web.
  • phạm vi – Cho phép bạn lọc danh sách các sản phẩm API mà có thể sử dụng mã thông báo đã tạo. Để biết thông tin chi tiết về phạm vi, hãy xem bài viết Làm việc với phạm vi OAuth2.

Xác thực

Bạn phải chuyển ID ứng dụng khách và Mật khẩu ứng dụng khách dưới dạng tiêu đề Xác thực cơ bản (Được mã hoá base64) hoặc dưới dạng tham số mẫu client_idclient_secret. Bạn lấy các giá trị này từ ứng dụng của nhà phát triển đã đăng ký liên quan đến yêu cầu. Xem thêm "Xác thực cơ bản mã hoá bằng chứng xác thực".

Điểm cuối mẫu

Dưới đây là cấu hình điểm cuối mẫu để tạo mã truy cập. Thao tác này sẽ thực thi Chính sách GenerateAccessToken phải được định cấu hình để hỗ trợ loại cấp mật khẩu.

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Chính sách mẫu

Đây là một chính sách GenerateAccessToken cơ bản được định cấu hình để chấp nhận việc cấp mật khẩu loại. Để biết thông tin về các phần tử cấu hình tuỳ chọn mà bạn có thể định cấu hình bằng chính sách này, xem chính sách về OAuthV2.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Trả về

Khi bật <GenerateResponse>, chính sách sẽ trả về phản hồi JSON. Ghi chú với loại cấp mật khẩu, cả mã truy cập và mã làm mới đều được tạo. Ví dụ:

{
    "issued_at": "1420258685042",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420258685042",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "0"
}

Nếu bạn đặt <GenerateResponse> thành false, chính sách sẽ không trả về của bạn. Thay vào đó, phương thức này điền dữ liệu liên quan đến tập hợp các biến luồng sau đây cấp mã truy cập.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Ví dụ:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

Yêu cầu mã truy cập: cấp quyền ngầm lượt chuyển đổi

Phần này giải thích cách yêu cầu mã truy cập bằng quy trình loại cấp quyền ngầm ẩn. Cho giới thiệu về các loại cấp quyền OAuth 2.0, hãy xem Giới thiệu về OAuth 2.0.

Mẫu yêu cầu

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'https://docs-test.apigee.net/oauth/implicit?response_type=token&client_id=ABC123&redirect_uri=http://callback-example.com'

Bắt buộc tham số

Theo mặc định, các thông số này phải là tham số truy vấn (như trong mẫu ở trên); tuy nhiên, bạn có thể thay đổi giá trị mặc định này bằng cách định cấu hình <ResponseType>, Các phần tử <ClientId><RedirectUri> trong OAuthV2 được đính kèm với điểm cuối /token này. Để biết thông tin chi tiết, hãy xem Chính sách về OAuthV2.

Thông tin xác thực người dùng thường được xác thực dựa trên kho lưu trữ thông tin xác thực bằng dịch vụ LDAP chính sách chú thích hoặc JavaScript của Google.

  • response_type – Phải được đặt thành giá trị token.
  • client_id – Mã ứng dụng khách của ứng dụng nhà phát triển đã đăng ký.
  • redirect_uri – Tham số này là bắt buộc nếu URI gọi lại không có được cung cấp khi ứng dụng của nhà phát triển ứng dụng được đăng ký. Nếu URL gọi lại được cung cấp tại ứng dụng đăng ký, nó sẽ được so sánh với giá trị này và phải khớp chính xác.

Không bắt buộc tham số

  • trạng thái – Chuỗi sẽ được gửi lại cùng với phản hồi. Thường dùng để ngăn chặn các cuộc tấn công giả mạo yêu cầu trên nhiều trang web.
  • phạm vi – Cho phép bạn lọc danh sách các sản phẩm API mà có thể sử dụng mã thông báo đã tạo. Để biết thông tin chi tiết về phạm vi, hãy xem bài viết Làm việc với phạm vi OAuth2.

Xác thực

Cấp quyền ngầm không yêu cầu xác thực cơ bản. Bạn cần chuyển ID ứng dụng khách dưới dạng như được giải thích ở đây.

Điểm cuối mẫu

Dưới đây là cấu hình điểm cuối mẫu để tạo mã truy cập. Thao tác này sẽ thực thi Chính sách GenerateAccessTokenManifestGrant.

...
       <Flow name="generate-access-token-implicit">
            <Request>
                <Step>
                    <Name>GenerateAccessTokenImplicitGrant</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition>
        </Flow>
...

Chính sách mẫu

Đây là một chính sách GenerateAccessTokenToken cơ bản giúp xử lý các yêu cầu về mã thông báo cho luồng loại cấp quyền ngầm ẩn. Để biết thông tin về các phần tử cấu hình tuỳ chọn mà bạn có thể định cấu hình bằng chính sách này, hãy xem chính sách OAuthV2.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="GenerateAccessTokenImplicit">
    <DisplayName>GenerateAccessTokenImplicit</DisplayName>
    <Operation>GenerateAccessTokenImplicitGrant</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Trả về

Khi bật <GenerateResponse>, chính sách sẽ trả về lệnh chuyển hướng vị trí 302 trong tiêu đề phản hồi. Lệnh chuyển hướng này trỏ đến URL được chỉ định trong redirect_uri và được thêm vào cùng với mã truy cập và thời gian hết hạn mã thông báo. Lưu ý rằng hàm ngầm ẩn không hỗ trợ mã làm mới. Ví dụ:

https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5

Nếu bạn đặt <GenerateResponse> thành false, chính sách sẽ không trả về của bạn. Thay vào đó, phương thức này điền dữ liệu liên quan đến tập hợp các biến luồng sau đây cấp mã truy cập.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in  //--in seconds

Ví dụ:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in   //--in seconds

Yêu cầu mã uỷ quyền

Nếu đang sử dụng quy trình loại cấp mã uỷ quyền, bạn cần phải được uỷ quyền trước khi có thể yêu cầu mã truy cập.

Yêu cầu mẫu

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'

trong đó có chính sách GenerateLicenseCode của OAuthV2 được đính kèm tại Điểm cuối proxy /oauth/authorize (xem điểm cuối mẫu ở bên dưới).

Bắt buộc tham số

Theo mặc định, các thông số này phải là tham số truy vấn (như trong mẫu ở trên); tuy nhiên, bạn có thể thay đổi giá trị mặc định này bằng cách định cấu hình <ResponseType>, Các phần tử <ClientId><RedirectUri> trong OAuthV2 được đính kèm với điểm cuối /authorize này. Để biết thông tin chi tiết, hãy xem Chính sách về OAuthV2.

  • response_type – Phải được đặt thành giá trị code.
  • client_id – Mã ứng dụng khách của ứng dụng nhà phát triển đã đăng ký.

Không bắt buộc tham số

  • redirect_uri – Nếu URI gọi lại toàn bộ (không phải một phần) được chỉ định trong ứng dụng khách đã đăng ký, thì tham số này là không bắt buộc; nếu không thì là bắt buộc. Lệnh gọi lại là URL mà Edge gửi mã xác thực mới tạo. Xem thêm bài viết Đăng ký ứng dụng và quản lý API khoá.
  • trạng thái – Chuỗi sẽ được gửi lại cùng với phản hồi. Thường dùng để ngăn chặn các cuộc tấn công giả mạo yêu cầu trên nhiều trang web.
  • phạm vi – Cho phép bạn lọc danh sách các sản phẩm API mà có thể sử dụng mã thông báo đã tạo. Để biết thông tin chi tiết về phạm vi, hãy xem bài viết Làm việc với phạm vi OAuth2.

Xác thực

Không yêu cầu xác thực cơ bản. Tuy nhiên, mã ứng dụng khách của ứng dụng khách đã đăng ký phải được cung cấp trong yêu cầu.

Điểm cuối mẫu

Dưới đây là cấu hình điểm cuối mẫu để tạo mã uỷ quyền:


<OAuthV2 name="GenerateAuthorizationCode">
  <Operation>GenerateAuthorizationCode</Operation>
    <!--
    ExpiresIn, in milliseconds. The ref is optional. The explicitly specified
    value is the default, when the variable reference cannot be resolved.
        60000 = 1 minute
       120000 = 2 minutes
    -->
  <ExpiresIn>60000</ExpiresIn>
  <GenerateResponse enabled="true"/>
</OAuthV2>

Chính sách mẫu

Đây là chính sách GenerateLicenseCode cơ bản. Để biết thông tin về cấu hình tuỳ chọn các phần tử mà bạn có thể định cấu hình bằng chính sách này, hãy xem chính sách OAuthV2.

<OAuthV2 name="GenerateAuthorizationCode">
    <Operation>GenerateAuthorizationCode</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Trả về

Khi bật <GenerateResponse>, chính sách sẽ trả về ?code tham số truy vấn đến vị trí redirect_uri (URI gọi lại) có yêu cầu uỷ quyền mã đính kèm. Thông báo được gửi qua lệnh chuyển hướng 302 trên trình duyệt với URL trong tiêu đề Vị trí của của bạn. Ví dụ: ?code=123456.

Nếu bạn đặt <GenerateResponse> thành false, chính sách này sẽ không trả về phản hồi. Thay vào đó, phương thức này điền dữ liệu liên quan đến tập hợp biến luồng sau đây vào mã uỷ quyền.

oauthv2authcode.{policy-name}.code
oauthv2authcode.{policy-name}.scope
oauthv2authcode.{policy-name}.redirect_uri
oauthv2authcode.{policy-name}.client_id

Ví dụ:

oauthv2authcode.GenerateAuthorizationCode.code
oauthv2authcode.GenerateAuthorizationCode.scope
oauthv2authcode.GenerateAuthorizationCode.redirect_uri
oauthv2authcode.GenerateAuthorizationCode.client_id

Làm mới mã truy cập

Mã làm mới là thông tin đăng nhập mà bạn sử dụng để lấy mã truy cập, thường là sau khi truy cập mã thông báo đã hết hạn hoặc không hợp lệ. Mã làm mới được trả về trong phản hồi khi bạn sẽ nhận được mã truy cập.

Cách yêu cầu mã truy cập mới bằng mã làm mới:

Yêu cầu mẫu

Để biết thông tin về cách mã hoá tiêu đề xác thực cơ bản trong lệnh gọi tiếp theo, hãy xem "Mã hoá thông tin xác thực cơ bản".

$ curl -X POST \
  -H "Content-type: application/x-www-form-urlencoded" \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \
  -d 'grant_type=refresh_token&refresh_token=my-refresh-token'

Tham số bắt buộc

  • grant_type – Phải được đặt thành giá trị refresh_token.
  • refresh_token – Mã làm mới được liên kết với mã truy cập mà bạn muốn gia hạn.

Theo mặc định, chính sách sẽ tìm các sự kiện này dưới dạng tham số x-www-form-urlencoded được chỉ định trong nội dung yêu cầu, như được thể hiện trong ví dụ ở trên. Để định cấu hình vị trí thay thế cho những thông tin đầu vào này, bạn có thể sử dụng <GrantType> và Phần tử <RefreshToken> trong chính sách OAuthV2. Để biết thông tin chi tiết, hãy xem Chính sách về OAuthV2.

Tham số không bắt buộc

  • trạng thái – Chuỗi sẽ được gửi lại cùng với phản hồi. Thường dùng để ngăn chặn các cuộc tấn công giả mạo yêu cầu trên nhiều trang web.
  • phạm vi – Cho phép bạn lọc danh sách các sản phẩm API mà có thể sử dụng mã thông báo đã tạo. Để biết thông tin chi tiết về phạm vi, hãy xem bài viết Làm việc với phạm vi OAuth2.

Xác thực

  • client_id
  • client_secret

Bạn phải chuyển ID ứng dụng khách và Mật khẩu ứng dụng khách dưới dạng tiêu đề Xác thực cơ bản (Được mã hoá base64) hoặc dưới dạng tham số mẫu client_idclient_secret. Xem cả "Mã hoá thông tin xác thực cơ bản".

Khi làm mới mã truy cập, người dùng sẽ không xác thực lại.

Dưới đây là cấu hình điểm cuối mẫu để tạo mã truy cập bằng mã làm mới. Thao tác này sẽ thực thi chính sách RefreshAccessToken.

 ...
       <Flow name="generate-refresh-token">
            <Request>
                <Step>
                    <Name>RefreshAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition>
       </Flow>
...

Chính sách mẫu

Đây là một chính sách RefreshAccessToken cơ bản được định cấu hình để chấp nhận Loại cấp quyền refresh_token. Để biết thông tin về các phần tử cấu hình tuỳ chọn bạn có thể định cấu hình bằng chính sách này, xem chính sách OAuthV2.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="RefreshAccessToken">
    <Operation>RefreshAccessToken</Operation>
    <GenerateResponse enabled="true"/>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
</OAuthV2>

Trả về

Khi bật <GenerateResponse>, chính sách sẽ trả về phản hồi JSON chứa mã truy cập mới. Loại cấp quyền refresh_token hỗ trợ đúc cả hai quyền truy cập và mã làm mới mới. Ví dụ:

{
    "issued_at": "1420301470489",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "refresh_token_issued_at": "1420301470489",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "token_type": "BearerToken",
    "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "2"
}

Bạn nên biết rằng sau khi tạo mã làm mới mới, mã gốc sẽ không còn hợp lệ nữa.

Bạn sẽ nhận được phản hồi ở trên nếu đặt <GenerateResponse> thành true. Nếu bạn đặt <GenerateResponse> thành false, thì chính sách sẽ không trả về phản hồi. Thay vào đó, phương thức này điền sẵn tập hợp các biến ngữ cảnh (luồng) sau đây bằng dữ liệu liên quan đến cấp mã truy cập.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Ví dụ:

oauthv2accesstoken.RefreshAccessToken.access_token
oauthv2accesstoken.RefreshAccessToken.expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token
oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at
oauthv2accesstoken.RefreshAccessToken.refresh_token_status

Mã hoá thông tin xác thực cơ bản

Bạn nên thực hiện lệnh gọi API để yêu cầu mã thông báo hoặc mã xác thực và theo thông số kỹ thuật OAuth 2.0 khuyến nghị để chuyển các giá trị client_id và client_secret dưới dạng tiêu đề Xác thực HTTP-Cơ bản, như được mô tả trong IETF RFC 2617. Để thực hiện việc này, bạn phải base64-mã hóa kết quả của việc kết hợp hai giá trị cùng với một dấu hai chấm phân tách chúng.

Trong mã giả:

result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))

Trong ví dụ này, ns4fQc14Zg4hKFCNaSzArVuwszX95X là client_id và ZIjFyTsNgQNyxI là mật khẩu ứng dụng khách.

Bất kể bạn sử dụng ngôn ngữ lập trình nào để tính toán giá trị được mã hoá base64, đối với những thông tin xác thực ứng dụng khách cho trước, kết quả được mã hoá base64 là: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

Sau đó, bạn có thể tạo yêu cầu mã thông báo như sau:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Tiện ích curl sẽ thực sự tạo tiêu đề HTTP Cơ bản cho bạn, nếu bạn sử dụng tùy chọn -u. Mã sau đây tương đương với các giá trị nêu trên:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -u 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Các môi trường lập trình khác có thể có các phím tắt tương tự để tự động tạo tiêu đề được mã hoá base64.

Băm mã thông báo trong cơ sở dữ liệu

Để bảo vệ quyền truy cập OAuth và mã làm mới trong trường hợp xảy ra vi phạm bảo mật cơ sở dữ liệu, bạn có thể bật tính năng tự động băm mã thông báo trong tổ chức Edge của bạn. Khi tính năng này được bật, Edge tự động tạo phiên bản băm cho mã truy cập OAuth mới tạo và làm mới mã thông báo bằng cách sử dụng thuật toán mà bạn chỉ định. (Sau đây là thông tin về việc băm hàng loạt mã thông báo hiện có.) Chiến lược phát hành đĩa đơn các mã thông báo chưa băm sẽ được dùng trong lệnh gọi API và Edge sẽ xác thực các mã này dựa trên các phiên bản đã băm trong cơ sở dữ liệu.

Các tài sản cấp tổ chức sau đây kiểm soát hoạt động băm mã thông báo OAuth.

features.isOAuthTokenHashingEnabled = true
features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

Nếu bạn hiện có các mã thông báo đã băm và muốn giữ lại các mã này cho đến khi hết hạn, hãy đặt giá trị các tài sản sau trong tổ chức của bạn, trong đó thuật toán băm khớp với (ví dụ: SHA1, giá trị mặc định cũ của Edge). Nếu mã thông báo chưa được băm, hãy sử dụng NHẤN.

features.isOAuthTokenFallbackHashingEnabled = true
features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

Nếu bạn là khách hàng sử dụng dịch vụ đám mây của Edge, hãy liên hệ với Bộ phận hỗ trợ Apigee Edge để thiết lập các thuộc tính trên tổ chức của mình và bạn có thể băm hàng loạt các mã thông báo hiện có.

Chủ đề có liên quan