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, ứng dụng sẽ gửi thông tin đăng nhập của riêng mình (Mã ứng dụng khách và Client Secret) đế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 là hợp lệ, Edge sẽ trả về mã truy cập cho ứng dụng.

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

Chủ đề này cung cấp nội dung mô tả chung về cách cấp thông tin đăng nhập ứng dụng OAuth 2.0 và thảo luận về 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 sử 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ụ bộ nhớ trên đám mây phụ trợ để lưu trữ và truy xuất dữ liệu ứng dụng sử dụng để thực hiện công việc của mình thay vì dữ liệu do người dùng cuối sở hữu cụ thể. Loại quyền này luồng diễn ra hoàn toàn 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ò chỉ định "diễn viên" tham gia vào quy trình OAuth. Hãy cùng xem 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ạ vị trí phù hợp của Apigee Edge. Để xem đầy đủ thảo luận về các vai trò của OAuth 2.0, xem thông số kỹ thuật của IETF OAuth 2.0.

  • Ứng dụng khách – Ứng dụng cần quyền truy cập vào dữ liệu được bảo vệ của người dùng của chúng tôi. 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ị khác.
  • Apigee Edge – Trong quy trình này, Apigee Edge là thông tin uỷ quyền OAuth máy chủ. Vai trò của nó là tạo mã truy cập, xác thực mã truy cập và chuyển mã truy cập đã được uỷ quyền các yêu cầu cho tài nguyên được bảo vệ tới 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, còn Apigee Edge cũng là máy chủ tài nguyên.

Mã mẫu

Bạn có thể tìm thấy hoàn chỉnh, hoạt động mẫu triển khai loại cấp thông tin đăng nhập ứng dụng trên GitHub. Tham khảo phần 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ạ quy trình thông tin đăng nhập của ứng dụng với quá trình phân phát Apigee Edge máy chủ uỷ quyền. Nhìn chung, Edge cũng là máy chủ tài nguyên trong quy trình này – tức là Proxy API là những tài nguyên được bảo vệ.


Các bước trong quy trình xác thực thông tin đăng nhập của ứng dụng

Dưới đây là phần tóm tắt các bước cần thiết để triển khai loại cấp mã thông tin xác thực ứng dụng 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ỉ hiển thị mã ứng dụng khách và mật khẩu ứng dụng khách. Nếu các thông tin này hợp lệ, Apigee Edge 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 để nhận được ID ứng dụng khách và khoá bí mật của ứng dụng khách. Xem phần Đăng ký ứng dụng khách để chi tiết.

1. Khách hàng yêu cầu một mã truy cập

Để nhận mã truy cập, máy khách sẽ POST một lệnh gọi API lên Edge kèm theo các giá trị cho mã ứng dụng khách và mật khẩu ứng dụng khách lấy từ một ứng dụng của nhà phát triển đã đăng ký. Ngoài ra, thông số Cấp_type=client_credentials phải được chuyể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ù bạn có thể chuyển các giá trị client_id và client_secret dưới dạng truy vấn như trình bày ở trên, bạn nên truyền chúng dưới dạng chuỗi được mã hoá bằng URL base64 trong tiêu đề Uỷ quyền. Để thực hiện việc này, bạn cần phải sử dụng một công cụ mã hoá hoặc tiện ích 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ư: aBase64EncodeFunction(clientidvalue:clientsecret). Vì vậy, ví dụ ở trên sẽ được mã hoá như sau:

kết quả = aBase64EncodeFunction(ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI) // Ghi chú dấu hai chấm phân tách hai giá trị.

Kết quả của việc mã hoá base64, chuỗi trên 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 sẽ xác thực thông tin xác thực

Xin 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ó chính sách được đính kèm để xác thực thông tin đăng nhập của ứng dụng. Điều đó có nghĩa là chính sách so sánh bằng 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ề các điểm cuối OAuth trên Edge, hãy xem bài viết Định cấu hình OAuth điểm cuối và chính sách.

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

Nếu thông tin đăng nhập ổn, Edge sẽ trả về mã truy cập cho ứng dụng. Nếu không thì có lỗi xảy ra bị trả lại.

4. Khách hàng gọi API được bảo vệ

Giờ đây, với 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 phần này Trong trường hợp này, yêu cầu đượ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 truyền lệnh gọi API đến máy chủ tài nguyên mục tiêu. 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

Với vai trò là máy chủ uỷ quyền, Edge sẽ xử lý các yêu cầu về mã truy cập. Là nhà phát triển API, bạn cần tạo proxy có quy trình tuỳ chỉnh để xử lý các yêu cầu về mã thông báo, cũng như thêm và định cấu hình 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 định cấu hình luồng proxy API là hiển thị luồng XML định nghĩa. Dưới đây là ví dụ về quy trình proxy API được thiết kế để xử lý yêu cầu về mã truy cập. Cho ví dụ: khi có yêu cầu và hậu tố đường dẫn khớp với /accesstoken, thì GetAccessToken chính sách đã được kích hoạt. Xem bài viết Định cấu hình OAuth điểm cuối và chính sách để xem 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 chính sách

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

Nhận mã truy cập

Chính sách này được đính kèm với đường dẫn /accesstoken. Phương thức này sử dụng OAuthV2 với hoạt động 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ó client_id được mã hoá base64 + client+secret và tham số truy vấn grant_type=client_credentials. Thông số này cũng có thể bao gồm các tham số không bắt buộc về 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 cơ chế bảo mật OAuth 2.0, bạn cần thêm chính sách OAuthV2 bằng mã Hoạt động 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ày. Nếu không hợp lệ, Edge sẽ trả về thông báo lỗi. Cho các bước cơ bản, hãy xem phần 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 cơ chế bảo mật của OAuth 2.0, bạn cần cung cấp quyền truy cập hợp lệ mã thông báo. Mẫu chính xác là đưa mã thông báo vào tiêu đề Uỷ quyền như sau: Lưu ý mã truy cập này còn được gọi là "mã thông báo mang".

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

Xem thêm phần Gửi quyền truy cập mã thông báo.

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ề API Security, bao gồm cả OAuth.
  • Chính sách OAuthV2 -- Có nhiều ví dụ minh hoạ cách gửi yêu cầu đến máy chủ uỷ quyền và cách định cấu hình chính sách OAuthV2.