Triển khai loại cấp thông tin đăng nhập ứng dụng

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

Với loại cấp thông tin đăng nhập ứng dụng, một ứng dụng sẽ gửi thông tin xác thực của riêng ứng dụng đó (Mã ứng dụng khách và Mật khẩu ứng dụng khách) đến một điểm cuối trên Apigee Edge được thiết lập để tạo mã truy cập. Nếu thông tin xác thực hợp lệ, Edge sẽ trả về một mã truy cập cho ứng dụng.

Giới thiệu về chủ đề này

Chủ đề này đưa ra nội dung mô tả chung về loại cấp thông tin xác thực ứng dụng OAuth 2.0, đồng thời thảo luận cách triển khai quy trình này trên Apigee Edge.

Trường hợp sử dụng

Thông thường, loại quyền này được dùng khi ứng dụng cũng là chủ sở hữu tài nguyên. Ví dụ: một ứng dụng có thể cần truy cập vào dịch vụ lưu trữ phụ trợ trên đám mây để lưu trữ và truy xuất dữ liệu mà ứng dụng dùng để thực hiện công việc, thay vì dữ liệu do người dùng cuối sở hữu cụ thể. Luồng loại cấp quyền này chỉ diễn ra giữa ứng dụng khách và máy chủ uỷ quyền. Người dùng cuối không tham gia vào quy trình loại tài trợ này.

Vai trò

Vai trò sẽ chỉ định "người thực hiện" tham gia vào quy trình OAuth. Hãy cùng tìm hiểu tổng quan nhanh về vai trò của thông tin đăng nhập của khách hàng để giúp minh hoạ những điểm phù hợp của Apigee Edge. Để thảo luận đầy đủ về các vai trò của OAuth 2.0, hãy xem thông số kỹ thuật của OAuth 2.0 cho IETF.

  • Ứng dụng khách – Ứng dụng cần quyền truy cập vào các tài nguyên được bảo vệ của người dùng. Thông thường, với quy trình này, ứng dụng sẽ chạy trên máy chủ thay vì cục bộ trên máy tính xách tay hoặc thiết bị của người dùng.
  • Apigee Edge – Trong quy trình này, Apigee Edge là máy chủ uỷ quyền OAuth. Vai trò của lớp này là tạo mã truy cập, xác thực mã truy cập và chuyển các yêu cầu được uỷ quyền đối với tài nguyên được bảo vệ đến máy chủ tài nguyên.
  • Máy chủ tài nguyên – Dịch vụ phụ trợ lưu trữ dữ liệu được bảo vệ mà ứng dụng khách cần có quyền truy cập. Nếu bạn đang bảo vệ các proxy API được lưu trữ trên Apigee Edge, thì Apigee Edge cũng là máy chủ tài nguyên.

Mã mẫu

Bạn có thể tìm thấy cách triển khai mẫu hoàn chỉnh cho kiểu cấp thông tin đăng nhập ứng dụng trên GitHub. Hãy tham khảo Tài nguyên khác dưới đây để xem đường liên kết đến những ví dụ khác.

Sơ đồ quy trình

Sơ đồ quy trình sau đây minh hoạ luồng thông tin xác thực của ứng dụng khách khi Apigee Edge phân phát với vai trò là máy chủ uỷ quyền. Nhìn chung, Edge cũng là máy chủ tài nguyên trong luồng này, tức là proxy API là các tài nguyên được bảo vệ.


Các bước trong quy trình xác thực ứng dụng

Sau đây là phần tóm tắt các bước cần thực hiện để triển khai hình thức cấp mã xác thực ứng dụng khách, trong đó Apigee Edge đóng vai trò là máy chủ uỷ quyền. Hãy nhớ rằng với quy trình này, ứng dụng khách chỉ cần trình bày mã ứng dụng khách và mật khẩu ứng dụng khách. Nếu hợp lệ, Apigee Edge sẽ trả về một mã truy cập.

Điều kiện tiên quyết: Ứng dụng khách phải được đăng ký với Apigee Edge để có được mã ứng dụng khách và khoá bí mật của ứng dụng. Vui lòng xem phần Đăng ký ứng dụng khách để biết thông tin chi tiết.

1. Ứng dụng yêu cầu mã truy cập

Để nhận mã truy cập, ứng dụng sẽ POST một lệnh gọi API đến Edge bằng các giá trị cho mã ứng dụng khách và mật khẩu ứng dụng khách thu được từ một ứng dụng của nhà phát triển đã đăng ký. Ngoài ra, tham số Grants_type=client_credentials phải được truyền dưới dạng tham số truy vấn. (Tuy nhiên, bạn có thể định cấu hình chính sách OAuthV2 để chấp nhận thông số này trong tiêu đề hoặc nội dung yêu cầu – xem chính sách OAuthV2 để biết chi tiết).

Ví dụ:

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

Lưu ý: Mặc dù có thể chuyển các giá trị client_id và client_secret dưới dạng tham số truy vấn như trình bày ở trên, nhưng bạn nên chuyển chúng dưới dạng chuỗi được mã hoá URL base64 trong tiêu đề Uỷ quyền. Để thực hiện việc này, bạn cần sử dụng công cụ hoặc tiện ích mã hoá base64 để mã hoá hai giá trị cùng với dấu hai chấm phân tách chúng. Chẳng hạn như sau: aBase64EncodeFunction(clientidvalue:clientsecret). Vì vậy, ví dụ ở trên sẽ được mã hoá như sau:

kết quả = aBase64EncodeFunction(ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI) // Lưu ý rằng dấu hai chấm phân tách hai giá trị.

Kết quả mã hoá chuỗi trên base64 là: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

Sau đó, hãy thực hiện yêu cầu mã thông báo như sau:

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

2. Edge xác thực thông tin xác thực

Lưu ý rằng lệnh gọi API được gửi đến điểm cuối /accesstoken. Điểm cuối này có một chính sách đính kèm để xác thực thông tin xác thực của ứng dụng. Tức là chính sách này sẽ so sánh các khoá đã gửi với các khoá mà Apigee Edge đã tạo khi ứng dụng được đăng ký. Nếu bạn muốn tìm hiểu thêm về điểm cuối OAuth trên Edge, hãy xem bài viết Định cấu hình điểm cuối OAuth và chính sách.

3. Edge trả về một phản hồi

Nếu thông tin xác thực không chính xác, Edge sẽ trả về một mã truy cập cho ứng dụng. Nếu không, hệ thống sẽ trả về lỗi.

4. Ứng dụng gọi API được bảo vệ

Giờ đây, khi có mã truy cập hợp lệ, ứng dụng có thể thực hiện lệnh gọi đến API được bảo vệ. Trong trường hợp này, các yêu cầu sẽ được gửi đến Apigee Edge (máy chủ proxy) và Edge sẽ chịu trách nhiệm xác thực mã truy cập trước khi chuyển lệnh gọi API đến máy chủ tài nguyên đích. Để biết ví dụ, hãy xem phần Gọi API được bảo vệ ở bên dưới.

Định cấu hình quy trình và chính sách

Là máy chủ uỷ quyền, Edge sẽ xử lý các yêu cầu về mã thông báo truy cập. Là nhà phát triển API, bạn cần tạo một proxy có quy trình tuỳ chỉnh để xử lý các yêu cầu về mã thông báo, đồng thời thêm và định cấu hình một chính sách OAuthV2. Phần này giải thích cách định cấu hình điểm cuối đó.

Cấu hình luồng tuỳ chỉnh

Cách dễ nhất để cho thấy cách luồng proxy API được định cấu hình là hiển thị định nghĩa luồng XML. Dưới đây là ví dụ về quy trình proxy API được thiết kế để xử lý yêu cầu mã thông báo truy cập. Ví dụ: khi có yêu cầu đến và hậu tố của đường dẫn khớp với /accesstoken, thì chính sách GetAccessToken sẽ được kích hoạt. Xem bài viết Định cấu hình điểm cuối và chính sách OAuth để biết thông tin tổng quan nhanh về các bước cần thiết để tạo một quy trình tuỳ chỉnh như thế này.

<Flows>
  <Flow name="GetAccessToken">
         <!-- This policy flow is triggered when the URI path suffix
         matches /oauth/accesstoken. Publish this URL to app developers 
         to use when obtaining an access token using an auth code   
         -->
    <Condition>proxy.pathsuffix == "/oauth/accesstoken"</Condition>
    <Request>
        <Step><Name>GetAccessToken</Name></Step>
    </Request>
  </Flow>
</Flows>

Định cấu hình quy trình bằng một chính sách

Bạn cần đính kèm chính sách vào điểm cuối như sau. Xem bài viết Định cấu hình điểm cuối và chính sách OAuth để biết thông tin tổng quan nhanh về các bước cần thiết để thêm chính sách OAuthV2 vào điểm cuối proxy.

Nhận mã truy cập

Chính sách này được đính kèm vào đường dẫn /accesstoken. Phương thức này sử dụng chính sách OAuthV2 với thao tác GenerateAccessToken được chỉ định.

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse/>
</OAuthV2>

Lệnh gọi API để lấy mã truy cập là một yêu cầu POST và bao gồm một tiêu đề Uỷ quyền có chứa client_id + client+secret được mã hoá base64 và tham số truy vấn lấy_type=client_credentials. Bạn cũng có thể thêm các thông số không bắt buộc cho phạm vi và trạng thái. Ví dụ:

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

Đính kèm chính sách về mã truy cập xác minh

Để bảo vệ API của bạn bằng tính năng bảo mật OAuth 2.0, bạn cần thêm chính sách OAuthV2 bằng thao tác VerifyAccessToken. Chính sách này kiểm tra để đảm bảo rằng các yêu cầu đến có mã truy cập hợp lệ. Nếu mã thông báo hợp lệ, Edge sẽ xử lý yêu cầu. Nếu giá trị không hợp lệ, Edge sẽ trả về lỗi. Để biết các bước cơ bản, hãy xem bài viết Xác minh mã truy cập.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="VerifyAccessToken">
    <DisplayName>VerifyAccessToken</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>VerifyAccessToken</Operation>
    <SupportedGrantTypes/>
    <GenerateResponse enabled="true"/>
    <Tokens/>
</OAuthV2>

Gọi API được bảo vệ

Để gọi một API được bảo vệ bằng OAuth 2.0, bạn cần cung cấp mã truy cập hợp lệ. Cần đưa mã thông báo vào tiêu đề Uỷ quyền như sau: Xin lưu ý rằng mã truy cập còn được gọi là "mã thông báo truy cập".

$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \
  http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282 

Hãy xem thêm bài viết Gửi mã truy cập.

Tài nguyên khác

  • Apigee cung cấp khoá đào tạo trực tuyến cho các nhà phát triển API, trong đó có khoá học về bảo mật API, trong đó có OAuth.
  • Chính sách OAuthV2 – Có nhiều ví dụ minh hoạ cách gửi yêu cầu tới máy chủ uỷ quyền và cách định cấu hình chính sách OAuthV2.