OAuth

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

OAuth đã nổi lên như là giao thức uỷ quyền hàng đầu cho các API. Phiên bản OAuth được đề cập chi tiết trong chủ đề này được xác định trong phần Thông số kỹ thuật của OAuth 2.0.

OAuth là một giao thức cho phép người dùng cuối của ứng dụng uỷ quyền cho ứng dụng hành động thay mặt họ. Các ứng dụng làm như vậy bằng cách lấy mã truy cập từ nhà cung cấp API. Trình cung cấp API sẽ xác thực thông tin đăng nhập của người dùng cuối của ứng dụng, đảm bảo rằng người dùng đã uỷ quyền cho ứng dụng, sau đó cấp mã truy cập cho ứng dụng. Khi ứng dụng sử dụng API được bảo vệ, Apigee Edge sẽ kiểm tra mã truy cập để đảm bảo rằng mã đó hợp lệ và chưa hết hạn. Là nhà cung cấp API, bạn cần hiển thị các điểm cuối cho phép ứng dụng nhận mã truy cập.

Để giúp bạn dễ dàng bắt đầu sử dụng OAuth, quá trình ứng dụng Apigee cho phép bạn định cấu hình và thực thi OAuth bằng chính sách mà không yêu cầu bạn viết mã. Trong chủ đề này, bạn sẽ tìm hiểu cách bảo vệ API của mình, cách lấy mã truy cập và cách dùng các mã truy cập đó để truy cập vào API được bảo vệ.

Cấu hình OAuth mặc định cho tổ chức của bạn

Để thuận tiện, tất cả các tổ chức sử dụng Apigee Edge đều được định cấu hình sẵn bằng một nhóm điểm cuối OAuth 2.0 triển khai loại cấp thông tin đăng nhập của ứng dụng khách. Loại cấp thông tin đăng nhập ứng dụng xác định quy trình cấp mã truy cập để đổi lấy thông tin đăng nhập ứng dụng. Thông tin xác thực của ứng dụng này chỉ đơn giản là cặp khoá bí mật và khoá của người dùng mà Apigee Edge gây ra các vấn đề cho mỗi ứng dụng được đăng ký trong một tổ chức. "Thông tin xác thực ứng dụng khách" là chính cặp bí mật và khoá người dùng.

Để tìm hiểu thêm về cách cấp thông tin đăng nhập cho ứng dụng bằng Dịch vụ dành cho nhà phát triển Edge, hãy xem phần Đăng ký ứng dụng và quản lý khoá.

Vì lý do này, việc "nâng cấp" lược đồ bảo mật API từ phương thức xác thực khoá API sang thông tin xác thực ứng dụng OAuth tương đối đơn giản. Cả hai giao thức này đều sử dụng cùng một khoá người dùng và thông tin bí mật để xác thực ứng dụng. Điểm khác biệt là thông tin xác thực ứng dụng sẽ cung cấp thêm một lớp kiểm soát, vì bạn có thể dễ dàng thu hồi mã truy cập khi cần mà không cần phải thu hồi khoá người dùng của ứng dụng. Để làm việc với các điểm cuối OAuth mặc định, bạn có thể sử dụng bất kỳ khoá bí mật và khoá người dùng nào được tạo cho ứng dụng trong tổ chức của mình để truy xuất mã truy cập từ điểm cuối của mã thông báo. (Thậm chí bạn có thể bật thông tin xác thực ứng dụng cho các ứng dụng đã có khoá bí mật và khoá người dùng.)

Bạn có thể xem thông số kỹ thuật đầy đủ về việc cấp thông tin đăng nhập của ứng dụng trong phần Thông số kỹ thuật của OAuth 2.0.

Bảo vệ API của bạn bằng chính sách

Trước khi có thể sử dụng mã truy cập, bạn cần định cấu hình các API của mình để xác thực mã truy cập OAuth trong thời gian chạy. Để thực hiện việc này, bạn nên định cấu hình proxy API để validate mã truy cập. Điều này có nghĩa là mỗi khi một ứng dụng đưa ra yêu cầu sử dụng một trong các API của bạn, thì ứng dụng đó phải hiển thị một mã truy cập hợp lệ cùng với yêu cầu API đó. Apigee Edge xử lý sự phức tạp của việc tạo, lưu trữ và xác thực mã truy cập hiện có.

Bạn có thể dễ dàng thêm phương thức xác minh OAuth vào API khi tạo proxy API mới. Khi tạo proxy API mới, bạn có thể Thêm tính năng. Như hình minh hoạ bên dưới, bạn có thể thêm phương thức xác minh mã truy cập OAuth 2.0 bằng cách chọn nút chọn bên cạnh mục Bảo mật bằng mã truy cập OAuth phiên bản 2.0. Khi bạn chọn phương án này, hai chính sách sẽ được đính kèm vào proxy API mới tạo, một chính sách để xác minh mã truy cập và một chính sách khác để xoá mã truy cập sau khi được xác minh.

Ngoài ra, khi bạn đánh dấu vào mục Secure with OAuth v2.0 Access Tokens (Bảo mật bằng mã truy cập OAuth phiên bản 2.0), hộp đánh dấu Publish API Product (Xuất bản sản phẩm API) sẽ chuyển thành hộp đánh dấu và tự động được chọn. Hãy đánh dấu vào hộp này nếu bạn muốn tạo tự động một sản phẩm khi tạo proxy API mới. Sản phẩm được tạo tự động sẽ được tạo kèm theo mối liên kết với proxy API mới. Nếu bạn đang có sẵn một sản phẩm mà bạn muốn liên kết API mới này, hãy nhớ bỏ chọn hộp đánh dấu này để bạn không tạo ra sản phẩm không cần thiết. Để biết thông tin về các sản phẩm, hãy xem phần Sản phẩm API là gì?

Nếu cần bật tính năng xác minh mã truy cập cho proxy API đã tồn tại, bạn chỉ cần đính kèm một chính sách thuộc loại OAuthV2 vào API mà bạn muốn bảo vệ. Chính sách OAuthV2 hoạt động bằng cách chỉ định một phép toán. Nếu muốn xác thực mã truy cập, hãy chỉ định thao tác có tên là VerifyAccessToken. (Các loại thao tác khác được loại chính sách OAuthV2 hỗ trợ là GenerateAccessToken và GenerateRefreshToken. Bạn sẽ tìm hiểu về các thao tác đó khi thiết lập điểm cuối OAuth.)

Chính sách Verify OAuthTokens thuộc loại OAuthV2

Dưới đây là ví dụ về chính sách mẫu để xác thực mã truy cập. (Bảng bên dưới giải thích về chế độ cài đặt này.)

<OAuthV2 name="VerifyOAuthTokens"> 
  <Operation>VerifyAccessToken</Operation> 
</OAuthV2>

Cài đặt chính sách

Tên Nội dung mô tả Mặc định Bắt buộc?
OAuthV2 Loại chính sách
name Tên của chính sách này sẽ được tham chiếu trong cấu hình Điểm cuối proxy API. Không áp dụng
Operation Thao tác sẽ được thực thi theo chính sách OAuthV2. Bằng cách chỉ định VerifyAccessToken, bạn sẽ định cấu hình chính sách để kiểm tra các yêu cầu mã truy cập và xác minh rằng mã truy cập này là hợp lệ, chưa hết hạn và được phê duyệt để sử dụng tài nguyên API (URI) đã yêu cầu. (Để kiểm tra, chính sách sẽ đọc sản phẩm API mà ứng dụng được phê duyệt để sử dụng.) Không áp dụng

Để tạo chính sách này trong giao diện người dùng quản lý, hãy chuyển đến API > Proxy API.

Trong danh sách proxy API, hãy chọn Với máy tính.

Trong phần Overview (Tổng quan) cho weatherapi, hãy chọn chế độ xem Develop (Phát triển).

Từ trình đơn thả xuống, hãy chọn New Policy > OAuth v2.0 (Chính sách mới > OAuth phiên bản 2.0)

Sau khi bạn chọn chính sách OAuth phiên bản 2.0, trình đơn cấu hình Chính sách mới sẽ hiển thị.

Đặt tên mang tính mô tả cho chính sách của bạn và nhớ chọn Attach Policy (Chính sách đính kèm), Flow PreFlow (Quy trình đính kèm) và Request (Yêu cầu) làm chế độ cài đặt cho tệp đính kèm chính sách.

Chọn Add (Thêm) rồi chính sách này sẽ được tạo và đính kèm vào yêu cầu PreFlow của API thời tiết.

Sau khi bạn thêm chính sách này, yêu cầu cấu hình PreFlow bên dưới sẽ xuất hiện trong ngăn Designer (Nhà thiết kế).

Nếu đang làm việc trên một trình chỉnh sửa văn bản hoặc IDE, bạn sẽ đính kèm Chính sách vào yêu cầu PreFlow của proxy API mà bạn muốn bảo vệ:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthTokens</Name></Step>
  </Request>
</PreFlow>

Bằng việc đính kèm chính sách này vào yêu cầu PreFlow, bạn đảm bảo rằng chính sách này luôn được thực thi trên mọi thông báo yêu cầu.

Bạn hiện đã bảo mật API bằng thông tin xác thực ứng dụng OAuth 2.0. Bước tiếp theo là tìm hiểu cách lấy mã truy cập và sử dụng mã đó để truy cập vào API bảo mật.

Sử dụng mã truy cập để truy cập vào một tài nguyên được bảo vệ

Hiện thời tiết được bảo mật bằng OAuth 2.0, các ứng dụng phải cung cấp mã truy cập để sử dụng API này. Để truy cập vào một tài nguyên được bảo vệ, ứng dụng sẽ hiển thị một mã truy cập trong yêu cầu dưới dạng tiêu đề HTTP"Uỷ quyền" như sau:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

Vì API này đã đính kèm chính sách OAuthV2 nên Apigee sẽ xác minh rằng mã truy cập được giới thiệu là hợp lệ, sau đó cấp quyền truy cập vào API, trả về báo cáo thời tiết cho ứng dụng đã đưa ra yêu cầu.

Nhưng làm cách nào để ứng dụng nhận mã truy cập? Chúng tôi sẽ đề cập đến vấn đề này trong phần tiếp theo.

Cách trao đổi thông tin đăng nhập ứng dụng để lấy mã truy cập

Các ứng dụng nhận mã truy cập bằng cách hiển thị các cặp bí mật/khoá của người dùng cho điểm cuối mã thông báo. Điểm cuối của mã thông báo được định cấu hình trong proxy API có tên là oauth. Vì vậy, các ứng dụng cần gọi API do proxy API oauth hiển thị để nhận mã truy cập. Sau khi có mã truy cập, ứng dụng có thể gọi weatherapi nhiều lần cho đến khi mã truy cập hết hạn hoặc mã truy cập bị thu hồi.

Bây giờ, bạn cần chuyển sang chủ đề khác để coi mình là một nhà phát triển ứng dụng. Bạn muốn gọi weatherapi, vì vậy, bạn cần có mã truy cập cho ứng dụng của mình. Điều đầu tiên bạn cần làm là lấy một cặp bí mật và khoá người tiêu dùng (còn gọi là khoá API hoặc khoá ứng dụng).

Bạn có thể nhận khoá và bí mật của người dùng bằng cách đăng ký một ứng dụng trong tổ chức của mình trên Apigee.

Bạn có thể xem tất cả ứng dụng thuộc tổ chức của mình trong giao diện người dùng quản lý Apigee Edge.

Danh sách ứng dụng đã đăng ký trong tổ chức của bạn sẽ hiển thị.

(Nếu không có ứng dụng nào xuất hiện, bạn có thể tìm hiểu cách đăng ký ứng dụng trong chủ đề Đăng ký ứng dụng và quản lý khoá API.)

Chọn một ứng dụng trong danh sách để xem hồ sơ chi tiết của ứng dụng đó.

Trong chế độ xem chi tiết cho ứng dụng bạn đã chọn, hãy lưu ý các trường cho Khoá người dùngThông tin mật của người tiêu dùng. Hai giá trị này là thông tin đăng nhập ứng dụng mà bạn sẽ dùng để lấy mã truy cập OAuth.

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apps \
-u myname:mypass 

Lệnh gọi này trả về một danh sách các ứng dụng theo mã ứng dụng.

[ "da496fae-2a04-4a5c-b2d0-709278a6f9db", "50e3e831-175b-4a05-8fb6-05a54701af6e" ]

Bạn có thể truy xuất hồ sơ của một ứng dụng bằng cách thực hiện một lệnh gọi GET đơn giản trên mã ứng dụng:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apps/{app_id} \
-u myname:mypass 

Ví dụ:

$ curl https://api.enterprise.apigee.com/v1/o/{org_name}/apps/da496fae-2a04-4a5c-b2d0-709278a6f9db \
-u myname:mypass 

Lệnh gọi API trả về hồ sơ của ứng dụng mà bạn đã chỉ định. Ví dụ: hồ sơ ứng dụng cho thời tiết có cách biểu thị JSON như sau:

{
  "accessType" : "read",
  "apiProducts" : [ ],
  "appFamily" : "default",
  "appId" : "da496fae-2a04-4a5c-b2d0-709278a6f9db",
  "attributes" : [ ],
  "callbackUrl" : "http://weatherapp.com",
  "createdAt" : 1380290158713,
  "createdBy" : "noreply_admin@apigee.com",
  "credentials" : [ {
    "apiProducts" : [ {
      "apiproduct" : "PremiumWeatherAPI",
      "status" : "approved"
    } ],
    "attributes" : [ ],
    "consumerKey" : "bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K",
    "consumerSecret" : "hAr4Gn0gA9vAyvI4",
    "expiresAt" : -1,
    "issuedAt" : 1380290161417,
    "scopes" : [ ],
    "status" : "approved"
  } ],
  "developerId" : "5w95xGkpnjzJDBT4",
  "lastModifiedAt" : 1380290158713,
  "lastModifiedBy" : "noreply_admin@apigee.com",
  "name" : "weatherapp",
  "scopes" : [ ],
  "status" : "approved"
}

Hãy lưu ý giá trị của consumerKeyconsumerSecret. Bạn sử dụng những thông tin đăng nhập này để lấy mã truy cập bằng cách xuất hiện dưới dạng thông tin xác thực cơ bản trong một yêu cầu HTTP như thể hiện dưới đây. Loại cấp được hiển thị dưới dạng tham số truy vấn đối với yêu cầu. (Hãy nhớ thay đổi giá trị của biến {org_name} để phản ánh tên của tổ chức của bạn trên Apigee Edge.)

Tạo yêu cầu để nhận mã truy cập

Trong yêu cầu sau, hãy thay thế giá trị của consumerKey bằng client_id. Thay thế giá trị của consumerSecret liên kết bằng client_secret.

$ curl https://{org_name}-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K&client_secret=hAr4Gn0gA9vAyvI4'

Dịch vụ API xác minh thông tin bí mật và khoá của người dùng, sau đó tạo phản hồi chứa mã truy cập cho ứng dụng này:

{
  "issued_at" : "1380892555397",
  "application_name" : "957aa73f-25c2-4ead-8021-adc01f0d2c6b",
  "scope" : "",
  "status" : "approved",
  "api_product_list" : "[oauth-test]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "client_id" : "bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K",
  "access_token" : "ylSkZIjbdWybfs4fUQe9BqP0LH5Z",
  "organization_name" : "rqa",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Hãy lưu ý giá trị access_token trong phản hồi ở trên. Đây là mã truy cập mà ứng dụng sẽ dùng để có được quyền truy cập vào các tài nguyên được bảo vệ khi bắt đầu chạy. Mã truy cập của ứng dụng này là ylSkZIjbdWybfs4fUQe9BqP0LH5Z.

Bạn hiện đã có một mã truy cập hợp lệ là ylSkZIjbdWybfs4fUQe9BqP0LH5Z. Mã này có thể dùng để truy cập vào các API được bảo vệ.

Làm việc với cấu hình OAuth mặc định

Mỗi tổ chức (kể cả tổ chức dùng thử miễn phí) sử dụng Apigee Edge đều được cấp phép bằng một điểm cuối của mã thông báo OAuth. Điểm cuối được định cấu hình sẵn bằng các chính sách trong proxy API có tên là oauth. Bạn có thể bắt đầu sử dụng điểm cuối của mã thông báo ngay khi tạo tài khoản trên Apigee Edge.

Điểm cuối OAuth mặc định hiển thị URI điểm cuối sau:

/oauth/client_credential/accesstoken

Xuất bản URI này cho các nhà phát triển cần lấy mã truy cập. Nhà phát triển ứng dụng định cấu hình ứng dụng để gọi điểm cuối này, trình bày các cặp khoá bí mật và khoá người dùng để lấy mã truy cập.

Điểm cuối mã thông báo thông tin xác thực mặc định của ứng dụng hiển thị qua mạng tại URL sau:

https://{org_name}-{env_name}.apigee.net/oauth/client_credential/accesstoken

Ví dụ: nếu tên tổ chức của bạn là "apimakers", URL sẽ là:

https://apimakers-test.apigee.net/oauth/client_credential/accesstoken

Đây là URL mà nhà phát triển sử dụng để lấy mã truy cập.

Cấu hình OAuth 3 bên

Cấu hình OAuth 3 bên (mã uỷ quyền, các loại cấp quyền ngầm ẩn và cấp mật khẩu) yêu cầu bạn, với tư cách là nhà cung cấp API, phải xác thực người dùng cuối của ứng dụng. Vì mỗi tổ chức đều xác thực người dùng theo những cách khác nhau, nên bạn cần phải tuỳ chỉnh một số mã hoặc tuỳ chỉnh chính sách để tích hợp OAuth với cửa hàng của người dùng. Ví dụ: tất cả người dùng của bạn có thể được lưu trữ trong Active Directory, trong LDAP hoặc một số kho lưu trữ người dùng khác. Để thiết lập và chạy OAuth cấp quyền truy cập, bạn cần tích hợp quy trình kiểm tra cửa hàng người dùng này vào quy trình OAuth tổng thể.

OAuth 1.0a

Để biết thông tin chi tiết về chính sách OAuth 1.0a, hãy xem Chính sách OAuth phiên bản 1.0a.

Yêu cầu trợ giúp

Để được trợ giúp, hãy xem phần Hỗ trợ khách hàng của API.