OAuth 2.0 cho ứng dụng iOS và ứng dụng dành cho máy tính

Tài liệu này giải thích cách các ứng dụng được cài đặt trên các thiết bị như điện thoại, máy tính bảng và máy tính sử dụng các điểm cuối OAuth 2.0 của Google để cho phép truy cập vào các API của Google.

OAuth 2.0 cho phép người dùng chia sẻ dữ liệu cụ thể với một ứng dụng trong khi vẫn giữ kín tên người dùng, mật khẩu và các thông tin khác. Ví dụ: một ứng dụng có thể sử dụng OAuth 2.0 để xin phép người dùng lưu trữ tệp trong Google Drive của họ.

Ứng dụng cần cài đặt được phân phối đến từng thiết bị và giả định rằng các ứng dụng này không thể giữ bí mật. Các ứng dụng này có thể truy cập vào API của Google khi người dùng đang sử dụng ứng dụng hoặc khi ứng dụng đang chạy ở chế độ nền.

Quy trình uỷ quyền này tương tự như quy trình dùng cho ứng dụng máy chủ web. Điểm khác biệt chính là các ứng dụng cần cài đặt phải mở trình duyệt hệ thống và cung cấp một URI chuyển hướng cục bộ để xử lý các phản hồi từ máy chủ uỷ quyền của Google.

Thư viện và mẫu

Đối với ứng dụng iOS, bạn nên sử dụng phiên bản mới nhất của SDK Đăng nhập bằng Google cho iOS. SDK này xử lý việc uỷ quyền của người dùng và dễ triển khai hơn so với giao thức cấp thấp hơn được mô tả trong hướng dẫn này.

Đối với các ứng dụng chạy trên thiết bị không hỗ trợ trình duyệt hệ thống hoặc có khả năng nhập dữ liệu hạn chế, chẳng hạn như TV, máy chơi trò chơi, máy ảnh hoặc máy in, hãy xem bài viết OAuth 2.0 cho TV và thiết bị hoặc Đăng nhập trên TV và thiết bị có khả năng nhập dữ liệu hạn chế.

Điều kiện tiên quyết

Bật API cho dự án của bạn

Mọi ứng dụng gọi API của Google đều cần bật các API đó trong Bảng điều khiển API.

Cách bật API cho dự án:

  1. Mở Thư viện API trong Google API Console.
  2. Nếu bạn nhận được lời nhắc, hãy chọn một dự án hoặc tạo dự án mới.
  3. Thư viện API liệt kê tất cả những API có sẵn, được nhóm theo nhóm sản phẩm và mức độ phổ biến. Nếu API bạn muốn chọn không hiển thị trong danh sách, hãy sử dụng chức năng tìm kiếm để tìm API đó hoặc nhấp vào Xem tất cả trong nhóm sản phẩm chứa API đó.
  4. Chọn API bạn muốn bật, sau đó nhấp vào nút Bật.
  5. Nếu bạn nhận được một lời nhắc, hãy bật tính năng thanh toán.
  6. Nếu bạn nhận được lời nhắc, hãy đọc và chấp nhận Điều khoản dịch vụ của API.

Tạo thông tin uỷ quyền

Bất kỳ ứng dụng nào sử dụng OAuth 2.0 để truy cập vào API của Google đều phải có thông tin xác thực uỷ quyền để xác định ứng dụng với máy chủ OAuth 2.0 của Google. Các bước sau đây giải thích cách tạo thông tin xác thực cho dự án của bạn. Sau đó, các ứng dụng của bạn có thể sử dụng thông tin đăng nhập để truy cập vào các API mà bạn đã bật cho dự án đó.

  1. Chuyển đến trang Ứng dụng.
  2. Nhấp vào Tạo ứng dụng.
  3. Các phần sau đây mô tả các loại ứng dụng mà máy chủ uỷ quyền của Google hỗ trợ. Chọn loại ứng dụng được đề xuất cho ứng dụng của bạn, đặt tên cho ứng dụng OAuth và đặt các trường khác trong biểu mẫu cho phù hợp.
iOS
  1. Chọn loại ứng dụng iOS.
  2. Nhập tên cho ứng dụng OAuth. Tên này xuất hiện trên trang Ứng dụng của dự án để xác định ứng dụng.
  3. Nhập mã nhận dạng gói cho ứng dụng của bạn. Mã nhận dạng gói là giá trị của khoá CFBundleIdentifier trong tệp tài nguyên danh sách thuộc tính thông tin của ứng dụng (info.plist). Giá trị này thường xuất hiện trong ngăn General (Chung) hoặc ngăn Signing & Capabilities (Ký và chức năng) của trình chỉnh sửa dự án Xcode. Mã nhận dạng gói cũng xuất hiện trong phần Thông tin chung của trang Thông tin ứng dụng cho ứng dụng trên trang web App Store Connect của Apple.

    Xác nhận rằng bạn đang sử dụng đúng mã nhận dạng gói cho ứng dụng của mình, vì bạn sẽ không thể thay đổi mã này nếu đang sử dụng tính năng Kiểm tra ứng dụng.

  4. (Không bắt buộc)

    Nhập Mã App Store của ứng dụng nếu ứng dụng được xuất bản trong App Store của Apple. Mã cửa hàng là một chuỗi số có trong mọi URL của Apple App Store.

    1. Mở ứng dụng Apple App Store trên thiết bị iOS hoặc iPadOS.
    2. Tìm ứng dụng của bạn.
    3. Chọn nút Chia sẻ (biểu tượng hình vuông và mũi tên hướng lên).
    4. Chọn Sao chép đường liên kết.
    5. Dán đường liên kết đó vào trình chỉnh sửa văn bản. Mã nhận dạng trên cửa hàng ứng dụng là phần cuối của URL.

      Ví dụ: https://apps.apple.com/app/google/id284815942

  5. (Không bắt buộc)

    Nhập Mã nhóm của bạn. Hãy xem phần Tìm mã nhóm trong tài liệu về Tài khoản nhà phát triển Apple để biết thêm thông tin.

    Lưu ý: Bạn bắt buộc phải điền vào trường Mã nhóm nếu đang bật tính năng Kiểm tra ứng dụng cho ứng dụng khách của mình.
  6. (Không bắt buộc)

    Bật tính năng Kiểm tra ứng dụng cho ứng dụng iOS của bạn. Khi bạn bật tính năng Kiểm tra ứng dụng, dịch vụ Chứng thực ứng dụng của Apple sẽ được dùng để xác minh rằng các yêu cầu OAuth 2.0 bắt nguồn từ ứng dụng OAuth của bạn là chính hãng và đến từ ứng dụng của bạn. Việc này giúp giảm nguy cơ mạo danh ứng dụng. Tìm hiểu thêm về cách bật tính năng Kiểm tra ứng dụng cho ứng dụng iOS.

  7. Nhấp vào Tạo.
Máy tính
  1. Chọn loại ứng dụng Ứng dụng dành cho máy tính.
  2. Trong trường Name (Tên), hãy nhập tên cho ứng dụng OAuth. Tên này được hiển thị trên trang Ứng dụng của dự án để xác định ứng dụng.
  3. Nhấp vào Tạo.

Xác định phạm vi truy cập

Phạm vi cho phép ứng dụng của bạn chỉ yêu cầu quyền truy cập vào những tài nguyên cần thiết, đồng thời cho phép người dùng kiểm soát mức độ truy cập mà họ cấp cho ứng dụng của bạn. Do đó, có thể có mối quan hệ nghịch đảo giữa số lượng phạm vi được yêu cầu và khả năng nhận được sự đồng ý của người dùng.

Trước khi bắt đầu triển khai quy trình uỷ quyền OAuth 2.0, bạn nên xác định các phạm vi mà ứng dụng của bạn cần có quyền truy cập.

Tài liệu Phạm vi API OAuth 2.0 chứa danh sách đầy đủ các phạm vi mà bạn có thể sử dụng để truy cập vào các API của Google.

Lấy mã truy cập OAuth 2.0

Các bước sau đây cho thấy cách ứng dụng của bạn tương tác với máy chủ OAuth 2.0 của Google để nhận được sự đồng ý của người dùng nhằm thực hiện yêu cầu API thay mặt cho người dùng. Ứng dụng của bạn phải có sự đồng ý đó trước khi có thể thực thi yêu cầu API của Google cần có sự uỷ quyền của người dùng.

Bước 1: Tạo trình xác minh mã và thử thách

Google hỗ trợ giao thức Khoá xác thực cho việc trao đổi mã (PKCE) để giúp quy trình ứng dụng đã cài đặt trở nên an toàn hơn. Một trình xác minh mã duy nhất được tạo cho mỗi yêu cầu uỷ quyền và giá trị đã biến đổi của trình xác minh mã đó (gọi là "code_challenge") sẽ được gửi đến máy chủ uỷ quyền để lấy mã uỷ quyền.

Tạo trình xác minh mã

code_verifier là một chuỗi ngẫu nhiên mật mã có entropy cao, sử dụng các ký tự không được đặt trước [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", có độ dài tối thiểu là 43 ký tự và độ dài tối đa là 128 ký tự.

Trình xác minh mã phải có đủ entropy để không thể đoán được giá trị.

Tạo thử thách mã

Có hai phương thức tạo thử thách mã được hỗ trợ.

Phương thức tạo mã xác thực
S256 (nên dùng) Mã xác minh là hàm băm SHA256 được mã hoá Base64URL (không có khoảng đệm) của trình xác minh mã.
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
plain Mã xác minh có cùng giá trị với mã xác minh được tạo ở trên.
code_challenge = code_verifier

Bước 2: Gửi yêu cầu đến máy chủ OAuth 2.0 của Google

Để được người dùng uỷ quyền, hãy gửi yêu cầu đến máy chủ uỷ quyền của Google tại https://accounts.google.com/o/oauth2/v2/auth. Điểm cuối này xử lý việc tra cứu phiên hoạt động, xác thực người dùng và nhận được sự đồng ý của người dùng. Điểm cuối chỉ có thể truy cập được qua SSL và từ chối các kết nối HTTP (không phải SSL).

Máy chủ uỷ quyền hỗ trợ các tham số chuỗi truy vấn sau đây cho các ứng dụng đã cài đặt:

Thông số
client_id Bắt buộc

Mã ứng dụng khách cho ứng dụng của bạn. Bạn có thể tìm thấy giá trị này trong trang Ứng dụng của Cloud Console.

redirect_uri Bắt buộc

Xác định cách máy chủ uỷ quyền của Google gửi phản hồi đến ứng dụng của bạn. Có một số lựa chọn chuyển hướng cho các ứng dụng cần cài đặt và bạn sẽ thiết lập thông tin xác thực uỷ quyền bằng một phương thức Redirect Method cụ thể.

Giá trị này phải khớp chính xác với một trong các URI chuyển hướng được uỷ quyền cho ứng dụng OAuth 2.0 mà bạn đã định cấu hình trong trang Ứng dụng của Cloud Console. Nếu giá trị này không khớp với một URI được uỷ quyền, bạn sẽ gặp lỗi redirect_uri_mismatch.

Bảng này cho thấy giá trị tham số redirect_uri thích hợp cho từng phương thức:

Giá trị redirect_uri
Lược đồ URI tuỳ chỉnh com.example.app:redirect_uri_path

hoặc

com.googleusercontent.apps.123:redirect_uri_path
  • com.example.app là ký hiệu DNS ngược của một miền mà bạn kiểm soát. Lược đồ tuỳ chỉnh phải chứa dấu chấm thì mới hợp lệ.
  • com.googleusercontent.apps.123 là ký hiệu DNS ngược của mã ứng dụng khách.
  • redirect_uri_path là một thành phần đường dẫn không bắt buộc, chẳng hạn như /oauth2redirect. Xin lưu ý rằng đường dẫn phải bắt đầu bằng một dấu gạch chéo, khác với URL loại HTTP thông thường.
Địa chỉ IP lặp lại http://127.0.0.1:port hoặc http://[::1]:port

Truy vấn nền tảng của bạn để tìm địa chỉ IP lặp lại có liên quan và khởi động trình nghe HTTP trên một cổng ngẫu nhiên có sẵn. Thay thế port bằng số cổng thực tế mà ứng dụng của bạn theo dõi.

Xin lưu ý rằng chúng tôi KHÔNG CÒN HỖ TRỢ lựa chọn chuyển hướng địa chỉ IP lặp lại trên ứng dụng di động nữa.

response_type Bắt buộc

Xác định xem điểm cuối Google OAuth 2.0 có trả về mã uỷ quyền hay không.

Đặt giá trị tham số thành code cho các ứng dụng đã cài đặt.

scope Bắt buộc

Danh sách phạm vi được phân tách bằng dấu cách, xác định các tài nguyên mà ứng dụng của bạn có thể truy cập thay mặt cho người dùng. Các giá trị này thông báo cho màn hình xin phép mà Google hiển thị cho người dùng.

Phạm vi cho phép ứng dụng của bạn chỉ yêu cầu quyền truy cập vào những tài nguyên cần thiết, đồng thời cho phép người dùng kiểm soát mức độ truy cập mà họ cấp cho ứng dụng của bạn. Do đó, có mối quan hệ nghịch đảo giữa số lượng phạm vi được yêu cầu và khả năng nhận được sự đồng ý của người dùng.

code_challenge Recommended (Nên dùng)

Chỉ định một code_verifier được mã hoá sẽ được dùng làm thử thách phía máy chủ trong quá trình trao đổi mã uỷ quyền. Hãy xem phần tạo mã thử thách để biết thêm thông tin.

code_challenge_method Recommended (Nên dùng)

Chỉ định phương thức được dùng để mã hoá code_verifier sẽ được dùng trong quá trình trao đổi mã uỷ quyền. Bạn phải sử dụng tham số này cùng với tham số code_challenge. Giá trị của code_challenge_method mặc định là plain nếu không có trong yêu cầu có chứa code_challenge. Các giá trị được hỗ trợ duy nhất cho tham số này là S256 hoặc plain.

state Recommended (Nên dùng)

Chỉ định bất kỳ giá trị chuỗi nào mà ứng dụng của bạn sử dụng để duy trì trạng thái giữa yêu cầu uỷ quyền và phản hồi của máy chủ uỷ quyền. Máy chủ trả về giá trị chính xác mà bạn gửi dưới dạng cặp name=value trong giá trị nhận dạng phân mảnh của URL (#) của redirect_uri sau khi người dùng đồng ý hoặc từ chối yêu cầu truy cập của ứng dụng.

Bạn có thể sử dụng tham số này cho một số mục đích, chẳng hạn như chuyển hướng người dùng đến tài nguyên chính xác trong ứng dụng của bạn, gửi số chỉ dùng một lần và giảm thiểu hành vi giả mạo yêu cầu trên nhiều trang web. Vì redirect_uri của bạn có thể đoán được, nên việc sử dụng giá trị state có thể giúp bạn yên tâm hơn rằng kết nối đến là kết quả của một yêu cầu xác thực. Nếu tạo một chuỗi ngẫu nhiên hoặc mã hoá hàm băm của cookie hoặc một giá trị khác ghi lại trạng thái của ứng dụng, thì bạn có thể xác thực phản hồi để đảm bảo thêm rằng yêu cầu và phản hồi bắt nguồn từ cùng một trình duyệt, giúp bảo vệ khỏi các cuộc tấn công như giả mạo yêu cầu trên nhiều trang web. Hãy xem tài liệu về OpenID Connect để biết ví dụ về cách tạo và xác nhận mã thông báo state.

login_hint Không bắt buộc

Nếu ứng dụng của bạn biết người dùng nào đang cố gắng xác thực, thì ứng dụng có thể sử dụng tham số này để cung cấp gợi ý cho Máy chủ xác thực của Google. Máy chủ sử dụng gợi ý này để đơn giản hoá quy trình đăng nhập bằng cách điền sẵn trường email trong biểu mẫu đăng nhập hoặc bằng cách chọn phiên đăng nhập nhiều tài khoản phù hợp.

Đặt giá trị tham số thành địa chỉ email hoặc giá trị nhận dạng sub, tương đương với Mã nhận dạng của người dùng trên Google.

.

URL uỷ quyền mẫu

Các thẻ bên dưới cho thấy URL uỷ quyền mẫu cho các lựa chọn URI chuyển hướng.

Các URL này giống hệt nhau, ngoại trừ giá trị của tham số redirect_uri. Các URL này cũng chứa các tham số response_type và client_id bắt buộc cũng như tham số state không bắt buộc. Mỗi URL đều chứa dấu ngắt dòng và dấu cách để dễ đọc.

Lược đồ URI tuỳ chỉnh

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=com.example.app%3A/oauth2redirect&
 client_id=client_id

Địa chỉ IP lặp lại

https://accounts.google.com/o/oauth2/v2/auth?
 scope=email%20profile&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=http%3A//127.0.0.1%3A9004&
 client_id=client_id

Bước 3: Google nhắc người dùng đồng ý

Trong bước này, người dùng quyết định xem có cấp cho ứng dụng của bạn quyền truy cập được yêu cầu hay không. Ở giai đoạn này, Google sẽ hiển thị một cửa sổ yêu cầu sự đồng ý, trong đó có tên ứng dụng của bạn và các dịch vụ API của Google mà ứng dụng đang yêu cầu quyền truy cập bằng thông tin xác thực của người dùng, cũng như thông tin tóm tắt về phạm vi truy cập sẽ được cấp. Sau đó, người dùng có thể đồng ý cấp quyền truy cập vào một hoặc nhiều phạm vi mà ứng dụng của bạn yêu cầu hoặc từ chối yêu cầu.

Ứng dụng của bạn không cần làm gì ở giai đoạn này vì ứng dụng đang chờ phản hồi từ máy chủ OAuth 2.0 của Google cho biết liệu có quyền truy cập nào được cấp hay không. Phản hồi đó được giải thích trong bước tiếp theo.

Lỗi

Yêu cầu gửi đến điểm cuối uỷ quyền OAuth 2.0 của Google có thể hiển thị thông báo lỗi dành cho người dùng thay vì quy trình xác thực và uỷ quyền dự kiến. Sau đây là các mã lỗi thường gặp và cách giải quyết đề xuất:

admin_policy_enforced

Tài khoản Google không thể uỷ quyền cho một hoặc nhiều phạm vi được yêu cầu do chính sách của quản trị viên Google Workspace. Hãy xem bài viết trợ giúp dành cho Quản trị viên Google Workspace Kiểm soát ứng dụng nội bộ và ứng dụng bên thứ ba nào có quyền truy cập vào dữ liệu trong Google Workspace để biết thêm thông tin về cách quản trị viên có thể hạn chế quyền truy cập vào tất cả phạm vi hoặc phạm vi nhạy cảm và bị hạn chế cho đến khi quyền truy cập được cấp rõ ràng cho mã ứng dụng khách OAuth của bạn.

disallowed_useragent

Điểm cuối uỷ quyền được hiển thị bên trong một tác nhân người dùng được nhúng không được Chính sách OAuth 2.0 của Google cho phép.

Nhà phát triển iOS và macOS có thể gặp lỗi này khi mở yêu cầu uỷ quyền trong WKWebView. Thay vào đó, nhà phát triển nên sử dụng các thư viện iOS như Đăng nhập bằng Google cho iOS hoặc AppAuth cho iOS của OpenID Foundation.

Nhà phát triển web có thể gặp lỗi này khi một ứng dụng iOS hoặc macOS mở một đường liên kết trang web chung trong một tác nhân người dùng được nhúng và người dùng chuyển đến điểm cuối uỷ quyền OAuth 2.0 của Google từ trang web của bạn. Nhà phát triển nên cho phép các đường liên kết chung mở trong trình xử lý đường liên kết mặc định của hệ điều hành, bao gồm cả trình xử lý Đường liên kết phổ quát hoặc ứng dụng trình duyệt mặc định. Thư viện SFSafariViewController cũng là một lựa chọn được hỗ trợ.

org_internal

Mã ứng dụng OAuth trong yêu cầu là một phần của dự án giới hạn quyền truy cập vào Tài khoản Google trong một Tổ chức Google Cloud cụ thể. Để biết thêm thông tin về lựa chọn cấu hình này, hãy xem phần Loại người dùng trong bài viết trợ giúp Thiết lập màn hình xin phép bằng OAuth.

deleted_client

Ứng dụng OAuth dùng để đưa ra yêu cầu đã bị xoá. Việc xoá có thể diễn ra theo cách thủ công hoặc tự động trong trường hợp máy khách không được sử dụng . Bạn có thể khôi phục khách hàng đã xoá trong vòng 30 ngày kể từ ngày xoá. Tìm hiểu thêm .

invalid_grant

Nếu bạn đang sử dụng mã xác minh và thử thách, thì tham số code_callenge không hợp lệ hoặc bị thiếu. Đảm bảo rằng bạn đã đặt đúng tham số code_challenge.

Khi làm mới mã truy cập, mã thông báo có thể đã hết hạn hoặc không hợp lệ. Xác thực lại người dùng và yêu cầu sự đồng ý của người dùng để nhận mã thông báo mới. Nếu bạn vẫn gặp lỗi này, hãy đảm bảo rằng ứng dụng của bạn đã được định cấu hình chính xác và bạn đang sử dụng đúng mã thông báo và tham số trong yêu cầu của mình. Nếu không, tài khoản người dùng có thể đã bị xoá hoặc bị vô hiệu hoá.

redirect_uri_mismatch

redirect_uri được truyền trong yêu cầu uỷ quyền không khớp với URI chuyển hướng được uỷ quyền cho mã ứng dụng OAuth. Xem lại các URI chuyển hướng được uỷ quyền trong trang Ứng dụng của Google Cloud Console.

redirect_uri được truyền có thể không hợp lệ đối với loại ứng dụng khách.

Tham số redirect_uri có thể đề cập đến quy trình OAuth ngoài băng tần (OOB) đã ngừng hoạt động và không còn được hỗ trợ. Tham khảo hướng dẫn di chuyển để cập nhật chế độ tích hợp.

invalid_request

Đã xảy ra lỗi với yêu cầu của bạn. Điều này có thể là do một số lý do:

  • Yêu cầu không được định dạng đúng cách
  • Yêu cầu thiếu các tham số bắt buộc
  • Yêu cầu này sử dụng một phương thức uỷ quyền mà Google không hỗ trợ. Xác minh rằng quá trình tích hợp OAuth của bạn sử dụng một phương thức tích hợp được đề xuất
  • Một lược đồ tuỳ chỉnh không được hỗ trợ đã được dùng cho URI chuyển hướng. Nếu bạn thấy thông báo lỗi Lược đồ URI tuỳ chỉnh không được hỗ trợ trên ứng dụng Android hoặc Ứng dụng Chrome, hãy tìm hiểu thêm về các lựa chọn thay thế lược đồ URI tuỳ chỉnh.

Bước 4: Xử lý phản hồi của máy chủ OAuth 2.0

Cách ứng dụng của bạn nhận được phản hồi uỷ quyền phụ thuộc vào lược đồ URI chuyển hướng mà ứng dụng sử dụng. Bất kể lược đồ nào, phản hồi sẽ chứa mã uỷ quyền (code) hoặc lỗi (error). Ví dụ: error=access_denied cho biết người dùng đã từ chối yêu cầu.

Nếu người dùng cấp quyền truy cập vào ứng dụng của bạn, thì bạn có thể đổi mã uỷ quyền lấy mã truy cập và mã làm mới như mô tả trong bước tiếp theo.

Bước 5: Đổi mã uỷ quyền lấy mã làm mới và mã truy cập

Để đổi mã uỷ quyền lấy mã truy cập, hãy gọi điểm cuối https://oauth2.googleapis.com/token và đặt các tham số sau:

Trường
client_id Mã ứng dụng khách lấy từ trang Ứng dụng khách của Cloud Console.
client_secret Không bắt buộc

Khoá bí mật của ứng dụng khách lấy từ trang Ứng dụng khách của Cloud Console.

code Mã uỷ quyền được trả về từ yêu cầu ban đầu.
code_verifier Trình xác minh mã mà bạn đã tạo ở Bước 1.
grant_type Theo quy định trong thông số kỹ thuật của OAuth 2.0, giá trị của trường này phải được đặt thành authorization_code.
redirect_uri Một trong các URI chuyển hướng được liệt kê cho dự án của bạn trong trang Ứng dụng của Cloud Console cho client_id đã cho.

Mặc dù việc sử dụng DPoP là không bắt buộc, nhưng bạn nên sử dụng để tăng cường bảo mật. Tính bảo mật của DPoP phụ thuộc vào việc khoá riêng tư chỉ được dùng cho một thiết bị; bạn nên lưu trữ khoá riêng tư theo cách không thể sao chép khoá đó ra khỏi thiết bị, chẳng hạn như bằng cách sử dụng TPM, Secure Enclave hoặc các kho khoá khác dựa trên phần cứng. Để sử dụng DPoP, ứng dụng của bạn phải tạo một JWT bằng chứng DPoP mới, duy nhất cho mỗi yêu cầu đến điểm cuối mã thông báo và thêm JWT đó làm tiêu đề yêu cầu HTTP.

Tiêu đề Bắt buộc Mô tả
DPoP Không bắt buộc Bằng chứng DPoP là một JWT chứng minh quyền sở hữu khoá riêng tư. Đây là tiêu đề, không phải tham số. Nếu được cung cấp, mã thông báo được trả về sẽ liên kết với khoá này. Bạn phải tạo một bằng chứng mới, riêng biệt cho mỗi yêu cầu và phải bao gồm các thông báo xác nhận quyền sở hữu htm (phương thức HTTP) và htu (URI HTTP) khớp với yêu cầu.

Đoạn mã sau đây cho thấy một yêu cầu mẫu:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik\
 VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR\
 nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE\
 QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj\
 oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia\
 WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg\
 4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
redirect_uri=http://127.0.0.1:9004&
grant_type=authorization_code

Tạo bằng chứng DPoP

Các bước sau đây cho biết cách tạo bằng chứng DPoP bằng OpenSSL từ dòng lệnh:

  1. Tạo cặp khoá EC P-256:
    openssl ecparam -name prime256v1 -genkey -noout -out dpop_private.pem
    openssl ec -in dpop_private.pem -pubout -out dpop_public.pem
  2. Tạo tiêu đề DPoP:

    Tiêu đề phải bao gồm các thông báo xác nhận quyền sở hữu typ, alg và jwk (khoá công khai). Giá trị x và y là toạ độ được mã hoá Base64Url của khoá công khai EC. Mã hoá Base64Url cho JSON này:

    {
      "typ":"dpop+jwt",
      "alg":"ES256",
      "jwk": {
        "kty":"EC",
        "x":"YOUR_PUBLIC_KEY_X",
        "y":"YOUR_PUBLIC_KEY_Y",
        "crv":"P-256"
      }
    }
  3. Tạo tải trọng DPoP:

    Trọng tải phải bao gồm jti (giá trị nhận dạng riêng biệt cho yêu cầu), htm (phương thức HTTP, ví dụ: POST), htu (URI HTTP, ví dụ: https://oauth2.googleapis.com/token) và iat (thời điểm phát hành). Nếu nhận được số chỉ dùng một lần từ máy chủ trong tiêu đề DPoP-Nonce khi phản hồi một yêu cầu trước đó, thì bạn phải đưa giá trị số chỉ dùng một lần đó vào thông báo xác nhận quyền sở hữu nonce. Xác nhận nonce là không bắt buộc đối với việc trao đổi mã uỷ quyền và chỉ được sử dụng khi tiêu đề DPoP-Nonce đã được nhận trước đó. Mã hoá Base64Url cho JSON này:

    {
      "jti":"JTI_VALUE",
      "htm":"POST",
      "htu":"https://oauth2.googleapis.com/token",
      "iat":YOUR_JWT_ISSUED_TIME,
      "nonce":"SERVER_PROVIDED_NONCE"
    }

    Giá trị jti phụ thuộc vào loại sàn giao dịch:

    • Đối với hoạt động trao đổi mã uỷ quyền, jti phải là hàm băm SHA256 được mã hoá Base64Url của mã uỷ quyền: "jti":"BASE64URL(SHA256(AUTHORIZATION_CODE))".
    • Đối với hoạt động trao đổi mã làm mới, jti phải là giá trị nhận dạng duy nhất cho mỗi yêu cầu: "jti":"YOUR_UNIQUE_PER_REQUEST_IDENTIFIER".
  4. Ký bằng chứng:

    Nối tiêu đề và tải trọng đã mã hoá bằng dấu chấm (.), sau đó ký kết quả bằng khoá riêng tư của bạn thông qua ES256. Xin lưu ý rằng JWS yêu cầu chữ ký phải ở định dạng nối R | S thô (64 byte cho P-256). Nếu sử dụng trực tiếp OpenSSL, bạn phải chuyển đổi chữ ký được mã hoá ASN.1 DER mặc định sang định dạng thô này.

Giao dịch trao đổi thành công được biểu thị bằng phản hồi 200 OK chứa mã thông báo. Nếu bạn sử dụng bằng chứng DPoP hợp lệ trong quá trình trao đổi, thì mã làm mới mà Google trả về sẽ được liên kết với khoá của bạn theo cơ chế DPoP, nhưng mã truy cập sẽ không được liên kết theo cơ chế DPoP. Mã truy cập sẽ giữ lại token_type của Bearer thay vì DPoP. Ngoài ra, Google sẽ trả về tiêu đề HTTP DPoP-Nonce trong phản hồi. Ứng dụng của bạn phải lưu trữ nonce này vào bộ nhớ đệm và đưa nonce này vào thông báo xác nhận quyền sở hữu nonce của bằng chứng DPoP trong các yêu cầu tiếp theo (chẳng hạn như khi đổi mã làm mới lấy mã truy cập mới hoặc khi gọi các API được DPoP bảo vệ). Bằng cách sử dụng số chỉ dùng một lần được cấp sớm này, bạn có thể tránh được lỗi khứ hồi bổ sung (use_dpop_nonce) trong yêu cầu tiếp theo.

Bạn phải cung cấp bằng chứng DPoP cho các yêu cầu trao đổi mã thông báo được thực hiện bằng mã làm mới liên kết với DPoP.

Lỗi trao đổi xảy ra nếu thiếu tiêu đề DPoP khi dự kiến, không hợp lệ hoặc nếu bằng chứng sử dụng khoá khác với khoá liên kết với mã thông báo. Trong những trường hợp này, máy chủ sẽ trả về lỗi 400 Bad Request. Nếu bằng chứng DPoP có các thông báo xác nhận quyền sở hữu htm hoặc htu không khớp, iat đã hết hạn, jti được sử dụng lại hoặc chữ ký không hợp lệ, thì Google sẽ trả về mã lỗi invalid_dpop_proof. Nếu cần có số chỉ dùng một lần DPoP, chẳng hạn như trong quá trình trao đổi mã làm mới và bằng chứng DPoP thiếu thông báo xác nhận quyền sở hữu nonce hoặc giá trị số chỉ dùng một lần không được máy chủ chấp nhận (ví dụ: đã hết hạn, đã được sử dụng hoặc không chính xác), thì Google sẽ trả về mã lỗi use_dpop_nonce cùng với tiêu đề HTTP DPoP-Nonce chứa số chỉ dùng một lần mới mà bạn có thể sử dụng trong yêu cầu tiếp theo. Các lỗi khác có thể trả về invalid_grant.

Google phản hồi yêu cầu này bằng cách trả về một đối tượng JSON chứa mã truy cập ngắn hạn và mã làm mới.

Phản hồi chứa các trường sau:

Trường
access_token Mã thông báo mà ứng dụng của bạn gửi để uỷ quyền cho một yêu cầu API của Google.
expires_in Thời gian còn lại của mã truy cập tính bằng giây.
id_token Lưu ý: Thuộc tính này chỉ được trả về nếu yêu cầu của bạn có chứa phạm vi danh tính, chẳng hạn như openid, profile hoặc email. Giá trị này là một Mã thông báo web JSON (JWT) chứa thông tin nhận dạng đã ký kỹ thuật số về người dùng.
refresh_token Mã thông báo mà bạn có thể dùng để lấy mã truy cập mới. Mã làm mới có hiệu lực cho đến khi người dùng thu hồi quyền truy cập hoặc mã làm mới hết hạn. Nếu bạn sử dụng DPoP, thì mã làm mới sẽ được liên kết với khoá riêng tư dùng để ký bằng chứng DPoP. Xin lưu ý rằng mã làm mới luôn được trả về cho các ứng dụng đã cài đặt.
refresh_token_expires_in Thời gian còn lại của mã làm mới tính bằng giây. Giá trị này chỉ được đặt khi người dùng cấp quyền truy cập theo thời gian.
scope Phạm vi truy cập được access_token cấp, được biểu thị dưới dạng danh sách các chuỗi phân tách bằng dấu cách, có phân biệt chữ hoa chữ thường.
token_type Loại mã thông báo được trả về. Giá trị này luôn là Bearer, ngay cả khi sử dụng DPoP.

Đoạn mã sau đây cho thấy tiêu đề phản hồi và nội dung phản hồi thành công mẫu khi sử dụng DPoP:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Bước 6: Kiểm tra xem người dùng đã cấp những phạm vi nào

Khi yêu cầu nhiều quyền (phạm vi), người dùng có thể không cấp cho ứng dụng của bạn quyền truy cập vào tất cả các quyền đó. Ứng dụng của bạn phải xác minh những phạm vi thực sự được cấp và xử lý linh hoạt các trường hợp một số quyền bị từ chối, thường là bằng cách tắt các tính năng dựa vào những phạm vi bị từ chối đó.

Tuy nhiên, vẫn có một số ngoại lệ. Các ứng dụng Google Workspace Enterprise có quyền uỷ quyền trên toàn miền hoặc các ứng dụng được đánh dấu là Đáng tin cậy sẽ bỏ qua màn hình xin phép cấp quyền truy cập chi tiết. Đối với những ứng dụng này, người dùng sẽ không thấy màn hình xin phép cấp quyền chi tiết. Thay vào đó, ứng dụng của bạn sẽ nhận được tất cả phạm vi được yêu cầu hoặc không nhận được phạm vi nào.

Để biết thêm thông tin chi tiết, hãy xem bài viết Cách xử lý các quyền truy cập chi tiết.

Để kiểm tra xem người dùng đã cấp cho ứng dụng của bạn quyền truy cập vào một phạm vi cụ thể hay chưa, hãy kiểm tra trường scope trong phản hồi mã truy cập. Phạm vi truy cập được cấp bởi mã truy cập được biểu thị dưới dạng danh sách các chuỗi phân biệt chữ hoa chữ thường, được phân tách bằng dấu cách.

Ví dụ: phản hồi mã truy cập mẫu sau đây cho biết rằng người dùng đã cấp cho ứng dụng của bạn quyền truy cập vào hoạt động trên Drive chỉ có thể đọc và quyền truy cập vào các sự kiện trên Lịch:

  {
    "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
    "expires_in": 3920,
    "token_type": "Bearer",
    "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
    "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
  }

Gọi API của Google

Sau khi ứng dụng của bạn nhận được mã truy cập, bạn có thể sử dụng mã này để thực hiện lệnh gọi đến một API của Google thay mặt cho một tài khoản người dùng nhất định nếu(các) phạm vi truy cập mà API yêu cầu đã được cấp. Để thực hiện việc này, hãy thêm mã truy cập vào yêu cầu gửi đến API bằng cách thêm tham số truy vấn access_token hoặc giá trị Bearer của tiêu đề HTTP Authorization. Nếu có thể, bạn nên sử dụng tiêu đề HTTP vì chuỗi truy vấn có xu hướng hiển thị trong nhật ký máy chủ. Trong hầu hết các trường hợp, bạn có thể sử dụng thư viện ứng dụng để thiết lập lệnh gọi đến API của Google (ví dụ: khi gọi API tệp Drive).

Bạn có thể dùng thử tất cả API của Google và xem phạm vi của các API đó tại OAuth 2.0 Playground.

Ví dụ về HTTP GET

Lệnh gọi đến điểm cuối drive.files (API Tệp trên Drive) bằng tiêu đề HTTP Authorization: Bearer có thể có dạng như sau. Lưu ý rằng bạn cần chỉ định mã truy cập của riêng mình:

GET /drive/v2/files HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

Dưới đây là lệnh gọi đến cùng một API cho người dùng đã xác thực bằng tham số chuỗi truy vấn access_token:

GET https://www.googleapis.com/drive/v2/files?access_token=access_token

Ví dụ về curl

Bạn có thể kiểm thử các lệnh này bằng ứng dụng dòng lệnh curl. Sau đây là ví dụ sử dụng lựa chọn tiêu đề HTTP (ưu tiên):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files

Hoặc, bạn có thể chọn tham số chuỗi truy vấn:

curl https://www.googleapis.com/drive/v2/files?access_token=access_token

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

Mã truy cập sẽ hết hạn định kỳ và trở thành thông tin xác thực không hợp lệ cho một yêu cầu API có liên quan. Bạn có thể làm mới mã truy cập mà không cần nhắc người dùng cấp quyền (kể cả khi người dùng không có mặt) nếu bạn đã yêu cầu quyền truy cập khi không có mạng vào các phạm vi liên kết với mã thông báo.

Để làm mới mã truy cập, ứng dụng của bạn sẽ gửi một yêu cầu HTTPS POST đến máy chủ uỷ quyền của Google (https://oauth2.googleapis.com/token) có chứa các tham số sau trong phần nội dung yêu cầu:

Tên Giá trị
client_id Mã ứng dụng khách lấy từ API Console.
client_secret Không bắt buộc

Khoá bí mật của ứng dụng khách lấy được từ API Console. (client_secret không áp dụng cho các yêu cầu từ ứng dụng khách đã đăng ký dưới dạng ứng dụng Android, iOS hoặc Chrome.)

grant_type Như được xác định trong quy cách của OAuth 2.0, giá trị của trường này phải được đặt thành refresh_token.
refresh_token Mã làm mới được trả về từ quá trình trao đổi mã uỷ quyền.

Mặc dù việc sử dụng DPoP là không bắt buộc, nhưng bạn nên sử dụng để tăng cường bảo mật. Để sử dụng DPoP với mã làm mới, ứng dụng của bạn phải tạo một JWT bằng chứng DPoP mới, duy nhất cho mỗi yêu cầu đến điểm cuối mã thông báo. Bằng chứng này phải được ký bằng cùng một khoá riêng tư đã được dùng trong quá trình trao đổi mã uỷ quyền ban đầu. Ứng dụng của bạn thêm bằng chứng dưới dạng tiêu đề của yêu cầu HTTP.

Tiêu đề Bắt buộc Mô tả
DPoP Không bắt buộc Bằng chứng DPoP là một JWT chứng minh quyền sở hữu khoá riêng tư. Đây là tiêu đề, không phải tham số. Nếu được cung cấp, mã thông báo được trả về sẽ liên kết với khoá này. Bạn phải tạo một bằng chứng mới, riêng biệt cho mỗi yêu cầu và phải bao gồm các thông báo xác nhận quyền sở hữu htm (phương thức HTTP) và htu (URI HTTP) khớp với yêu cầu.

Đoạn mã sau đây cho thấy một yêu cầu mẫu:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
DPoP: DPOP_PROOF_JWT

client_id=your_client_id&
refresh_token=refresh_token&
grant_type=refresh_token

Để sử dụng DPoP với mã làm mới, bạn phải tạo một JWT bằng chứng DPoP mới, duy nhất cho yêu cầu. Hãy xem phần Tạo bằng chứng DPoP để biết hướng dẫn từng bước về cách tạo cặp khoá và tạo JWT.

Giao dịch trao đổi thành công được biểu thị bằng phản hồi 200 OK chứa mã truy cập mới. Khi sử dụng DPoP, token_type là Bearer. Phản hồi thành công xác nhận rằng bằng chứng DPoP cho mã làm mới đã được chấp nhận. Google cũng có thể trả về một tiêu đề HTTP DPoP-Nonce mới trong phản hồi; nếu được trả về, ứng dụng của bạn phải lưu số chỉ dùng một lần này vào bộ nhớ đệm và đưa số đó vào thông báo xác nhận quyền sở hữu nonce của bằng chứng DPoP trong các yêu cầu tiếp theo.

Lượt trao đổi không thành công xảy ra nếu tiêu đề DPoP bị thiếu, không hợp lệ hoặc sử dụng khoá không chính xác. Để biết thông tin chi tiết về các mã lỗi DPoP cụ thể và cách xử lý số chỉ dùng một lần, hãy xem phần Trao đổi không thành công.

Đoạn mã sau đây cho thấy tiêu đề phản hồi và nội dung phản hồi thành công mẫu khi sử dụng DPoP:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
DPoP-Nonce: AN3XwJjZsjnb0ZuWkRlek8QU7wY-Zhf-5IP6tO0tORz0KgtDT1Bo8FX-w4nz3r5lnepI

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/calendar.readonly",
  "token_type": "Bearer"
}

Xin lưu ý rằng có giới hạn về số lượng mã làm mới sẽ được cấp; một giới hạn cho mỗi tổ hợp ứng dụng khách/người dùng và một giới hạn khác cho mỗi người dùng trên tất cả ứng dụng khách. Bạn nên lưu mã làm mới trong bộ nhớ dài hạn và tiếp tục sử dụng mã đó miễn là mã vẫn còn hiệu lực. Nếu ứng dụng của bạn yêu cầu quá nhiều mã làm mới, thì ứng dụng có thể đạt đến các giới hạn này. Trong trường hợp đó, các mã làm mới cũ hơn sẽ ngừng hoạt động.

Thu hồi mã thông báo

Trong một số trường hợp, người dùng có thể muốn thu hồi quyền truy cập đã cấp cho một ứng dụng. Người dùng có thể thu hồi quyền truy cập bằng cách truy cập vào phần Cài đặt tài khoản. Hãy xem phần Xoá quyền truy cập của trang web hoặc ứng dụng trong tài liệu hỗ trợ Các trang web và ứng dụng bên thứ ba có quyền truy cập vào tài khoản của bạn để biết thêm thông tin.

Ứng dụng cũng có thể thu hồi quyền truy cập được cấp cho ứng dụng đó theo phương thức lập trình. Việc thu hồi theo chương trình là rất quan trọng trong trường hợp người dùng huỷ đăng ký, xoá một ứng dụng hoặc tài nguyên API mà ứng dụng yêu cầu đã thay đổi đáng kể. Nói cách khác, một phần của quy trình xoá có thể bao gồm yêu cầu API để đảm bảo các quyền đã cấp trước đó cho ứng dụng sẽ bị xoá.

Để thu hồi mã thông báo theo phương thức lập trình, ứng dụng của bạn sẽ gửi một yêu cầu đến https://oauth2.googleapis.com/revoke và đưa mã thông báo vào làm tham số:

curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
        https://oauth2.googleapis.com/revoke?token={token}

Mã thông báo có thể là mã truy cập hoặc mã làm mới. Nếu mã thông báo là mã truy cập và có mã làm mới tương ứng, thì mã làm mới cũng sẽ bị thu hồi.

Nếu yêu cầu thu hồi được xử lý thành công, thì mã trạng thái HTTP của phản hồi sẽ là 200. Đối với các điều kiện lỗi, mã trạng thái HTTP 400 sẽ được trả về cùng với mã lỗi.

Phương thức Redirect Method

Lược đồ URI tuỳ chỉnh

Lược đồ URI tuỳ chỉnh là một dạng đường liên kết sâu sử dụng lược đồ do bạn xác định để mở ứng dụng.

Phương án thay thế cho việc sử dụng lược đồ URI tuỳ chỉnh trên ứng dụng Chrome

Sử dụng API nhận dạng của Chrome để gửi phản hồi OAuth 2.0 trực tiếp đến ứng dụng của bạn, giúp loại bỏ nhu cầu về URI chuyển hướng.

Địa chỉ IP lặp lại (macOS, Linux, Windows cho máy tính)

Để nhận mã uỷ quyền bằng URL này, ứng dụng của bạn phải đang theo dõi trên máy chủ web cục bộ. Bạn có thể làm việc này trên nhiều nền tảng, nhưng không phải tất cả. Tuy nhiên, nếu nền tảng của bạn hỗ trợ, thì đây là cơ chế được đề xuất để lấy mã uỷ quyền.

Khi ứng dụng của bạn nhận được phản hồi uỷ quyền, để có khả năng hữu dụng tốt nhất, ứng dụng nên phản hồi bằng cách hiển thị một trang HTML hướng dẫn người dùng đóng trình duyệt và quay lại ứng dụng của bạn.

Cách sử dụng nên dùng Ứng dụng dành cho máy tính chạy macOS, Linux và Windows
Giá trị biểu mẫu Đặt loại ứng dụng thành Ứng dụng dành cho máy tính.

Sao chép/dán thủ công (Không dùng nữa)

Bảo vệ ứng dụng của bạn

Xác minh quyền sở hữu ứng dụng cho Chrome

Bạn có thể xác minh quyền sở hữu ứng dụng để giảm nguy cơ bị mạo danh ứng dụng.

Để hoàn tất quy trình xác minh, bạn cần sử dụng tài khoản nhà phát triển trên Cửa hàng Chrome trực tuyến. Bạn phải đáp ứng các yêu cầu sau để xác minh thành công:

  • Bạn phải có một mục đã đăng ký trong Trang tổng quan dành cho nhà phát triển Cửa hàng Chrome trực tuyến có cùng mã mục với ứng dụng OAuth của Tiện ích của Chrome mà bạn đang hoàn tất quy trình xác minh.
  • Bạn phải là nhà xuất bản cho mặt hàng trên Cửa hàng Chrome trực tuyến. Tìm hiểu thêm về cách quản lý quyền truy cập trong Trang tổng quan dành cho nhà phát triển Cửa hàng Chrome trực tuyến.

Trong phần Xác minh quyền sở hữu ứng dụng của ứng dụng Tiện ích của Chrome, hãy nhấp vào nút Xác minh quyền sở hữu để hoàn tất quy trình xác minh.

Lưu ý: Hãy đợi vài phút trước khi hoàn tất quy trình xác minh sau khi cấp quyền truy cập vào tài khoản của bạn.

Nếu xác minh thành công, một thông báo sẽ xuất hiện để xác nhận rằng quy trình xác minh đã thành công. Nếu không, một lời nhắc lỗi sẽ xuất hiện.

Để khắc phục lỗi xác minh, hãy thử làm như sau:

  • Đảm bảo rằng có một mục đã đăng ký trong Trang tổng quan dành cho nhà phát triển Cửa hàng Chrome trực tuyến có cùng mã mặt hàng với ứng dụng OAuth của tiện ích Chrome mà bạn đang hoàn tất quy trình xác minh.
  • Đảm bảo rằng bạn là nhà xuất bản của ứng dụng, tức là bạn phải là nhà xuất bản cá nhân của ứng dụng hoặc là thành viên của nhà xuất bản nhóm của ứng dụng. Tìm hiểu thêm về cách quản lý quyền truy cập trong Trang tổng quan dành cho nhà phát triển Cửa hàng Chrome trực tuyến.
  • Nếu bạn vừa cập nhật danh sách nhà xuất bản nhóm, hãy xác minh rằng danh sách thành viên nhà xuất bản nhóm đã được đồng bộ hoá trong Trang tổng quan dành cho nhà phát triển của Cửa hàng Chrome trực tuyến. Tìm hiểu thêm về cách đồng bộ hoá danh sách thành viên của nhà xuất bản.

Kiểm tra ứng dụng (chỉ dành cho iOS)

Tính năng Kiểm tra ứng dụng giúp bảo vệ các ứng dụng iOS của bạn khỏi hành vi sử dụng trái phép bằng cách sử dụng dịch vụ Chứng thực ứng dụng của Apple để xác minh rằng các yêu cầu gửi đến điểm cuối OAuth 2.0 của Google bắt nguồn từ các ứng dụng chính hãng của bạn. Điều này giúp giảm nguy cơ mạo danh ứng dụng.

Bật tính năng Kiểm tra ứng dụng cho ứng dụng iOS

Bạn phải đáp ứng các yêu cầu sau để bật thành công tính năng Kiểm tra ứng dụng cho ứng dụng iOS:
  • Bạn phải chỉ định mã nhóm cho ứng dụng iOS của mình.
  • Bạn không được sử dụng ký tự đại diện trong mã nhận dạng gói vì ký tự này có thể phân giải thành nhiều ứng dụng. Điều này có nghĩa là mã nhận dạng gói không được chứa ký hiệu dấu hoa thị (*).
Để bật tính năng Kiểm tra ứng dụng, hãy bật nút bật tắt Bảo vệ ứng dụng OAuth của bạn khỏi hành vi sai trái bằng tính năng Kiểm tra ứng dụng Firebase trong chế độ sửa của ứng dụng iOS.

Sau khi bật tính năng Kiểm tra ứng dụng, bạn sẽ bắt đầu thấy các chỉ số liên quan đến yêu cầu OAuth từ ứng dụng của mình trong chế độ sửa của Ứng dụng OAuth. Các yêu cầu từ những nguồn chưa được xác minh sẽ không bị chặn cho đến khi bạn thực thi Kiểm tra ứng dụng. Thông tin trên trang giám sát chỉ số có thể giúp bạn xác định thời điểm bắt đầu thực thi.

Bạn có thể thấy lỗi liên quan đến tính năng Kiểm tra ứng dụng khi bật tính năng này cho ứng dụng iOS. Để khắc phục những lỗi này, hãy thử làm như sau:

  • Xác minh rằng mã nhận dạng gói và mã nhận dạng nhóm mà bạn chỉ định là hợp lệ.
  • Xác minh rằng bạn không sử dụng ký tự đại diện cho mã nhận dạng gói.

Thực thi Kiểm tra ứng dụng cho ứng dụng iOS của bạn

Việc bật tính năng Kiểm tra ứng dụng cho ứng dụng của bạn sẽ không tự động chặn các yêu cầu không nhận dạng được. Để thực thi biện pháp bảo vệ này, hãy chuyển đến chế độ sửa của ứng dụng iOS. Tại đó, bạn sẽ thấy các chỉ số của tính năng Kiểm tra ứng dụng ở bên phải trang trong mục Google Identity cho iOS. Các chỉ số bao gồm những thông tin sau:
  • Số lượng yêu cầu đã xác minh – các yêu cầu có mã thông báo Kiểm tra ứng dụng hợp lệ. Sau khi bạn bật chế độ thực thi Kiểm tra ứng dụng, chỉ những yêu cầu trong danh mục này mới thành công.
  • Số lượng yêu cầu chưa được xác minh: có thể là yêu cầu của ứng dụng khách đã lỗi thời – yêu cầu thiếu mã thông báo Kiểm tra ứng dụng; những yêu cầu này có thể là từ phiên bản cũ của ứng dụng không có triển khai Kiểm tra ứng dụng.
  • Số lượng yêu cầu chưa được xác minh: yêu cầu không rõ nguồn gốc – yêu cầu thiếu mã thông báo Kiểm tra ứng dụng và có vẻ như không đến từ ứng dụng của bạn.
  • Số lượng yêu cầu chưa được xác minh: yêu cầu không hợp lệ – yêu cầu có mã thông báo Kiểm tra ứng dụng không hợp lệ, có thể là từ một ứng dụng khách không xác thực đang cố gắng mạo danh ứng dụng của bạn hoặc từ môi trường mô phỏng.
Xem các chỉ số này để hiểu rõ việc thực thi Kiểm tra ứng dụng sẽ ảnh hưởng như thế nào đến người dùng.

Để thực thi Kiểm tra ứng dụng, hãy nhấp vào nút ENFORCE rồi xác nhận lựa chọn của bạn. Sau khi biện pháp thực thi có hiệu lực, tất cả yêu cầu chưa được xác minh từ ứng dụng của bạn sẽ bị từ chối.

Lưu ý: sau khi bạn bật chế độ thực thi, có thể mất đến 15 phút để các thay đổi có hiệu lực.

Huỷ thực thi Kiểm tra ứng dụng cho ứng dụng iOS

Việc huỷ thực thi Kiểm tra ứng dụng cho ứng dụng của bạn sẽ dừng việc thực thi và cho phép tất cả yêu cầu từ ứng dụng của bạn đến các điểm cuối Google OAuth 2.0, bao gồm cả các yêu cầu chưa được xác minh.

Để huỷ thực thi Kiểm tra ứng dụng cho ứng dụng iOS, hãy chuyển đến chế độ sửa của ứng dụng iOS rồi nhấp vào nút HUỶ THỰC THI và xác nhận lựa chọn của bạn.

Lưu ý: sau khi huỷ thực thi Kiểm tra ứng dụng, có thể mất đến 15 phút để các thay đổi có hiệu lực.

Tắt tính năng Kiểm tra ứng dụng cho ứng dụng iOS

Việc tắt tính năng Kiểm tra ứng dụng cho ứng dụng của bạn sẽ dừng tất cả hoạt động giám sát và thực thi của tính năng Kiểm tra ứng dụng. Hãy cân nhắc việc không thực thi Kiểm tra ứng dụng để có thể tiếp tục theo dõi các chỉ số cho ứng dụng khách.

Để tắt tính năng Kiểm tra ứng dụng cho ứng dụng iOS, hãy chuyển đến chế độ sửa của ứng dụng iOS rồi tắt nút bật tắt Bảo vệ ứng dụng OAuth của bạn khỏi hành vi sai trái bằng tính năng Kiểm tra ứng dụng Firebase.

Lưu ý: sau khi tắt tính năng Kiểm tra ứng dụng, có thể mất đến 15 phút để các thay đổi có hiệu lực.

Quyền truy cập theo thời gian

Quyền truy cập theo thời gian cho phép người dùng cấp cho ứng dụng của bạn quyền truy cập vào dữ liệu của họ trong một khoảng thời gian có hạn để hoàn tất một hành động. Quyền truy cập theo thời gian được cung cấp trong một số sản phẩm của Google trong quy trình đồng ý, cho phép người dùng cấp quyền truy cập trong một khoảng thời gian giới hạn. Ví dụ: Data Portability API cho phép chuyển dữ liệu một lần.

Khi người dùng cấp cho ứng dụng của bạn quyền truy cập theo thời gian, mã làm mới sẽ hết hạn sau khoảng thời gian được chỉ định. Xin lưu ý rằng mã làm mới có thể bị vô hiệu sớm hơn trong một số trường hợp cụ thể; hãy xem các trường hợp này để biết thông tin chi tiết. Trường refresh_token_expires_in được trả về trong phản hồi trao đổi mã uỷ quyền thể hiện thời gian còn lại cho đến khi mã làm mới hết hạn trong những trường hợp như vậy.

Tài liệu đọc thêm

Phương pháp hay nhất hiện tại của IETF OAuth 2.0 cho ứng dụng gốc thiết lập nhiều phương pháp hay nhất được ghi lại tại đây.

Triển khai tính năng Bảo vệ nhiều tài khoản

Một bước bổ sung mà bạn nên thực hiện để bảo vệ tài khoản của người dùng là triển khai tính năng Bảo vệ nhiều tài khoản bằng cách sử dụng Dịch vụ bảo vệ nhiều tài khoản của Google. Dịch vụ này cho phép bạn đăng ký nhận thông báo sự kiện bảo mật, cung cấp thông tin cho ứng dụng của bạn về những thay đổi lớn đối với tài khoản người dùng. Sau đó, bạn có thể sử dụng thông tin này để hành động tuỳ thuộc vào cách bạn quyết định phản hồi các sự kiện.

Sau đây là một số ví dụ về các loại sự kiện mà Dịch vụ bảo vệ nhiều tài khoản của Google gửi đến ứng dụng của bạn:

  • https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
  • https://schemas.openid.net/secevent/oauth/event-type/token-revoked
  • https://schemas.openid.net/secevent/risc/event-type/account-disabled

Hãy xem trang Bảo vệ tài khoản người dùng bằng tính năng Bảo vệ nhiều tài khoản để biết thêm thông tin về cách triển khai tính năng Bảo vệ nhiều tài khoản và xem danh sách đầy đủ các sự kiện hiện có.