Lỗi uỷ quyền

Trong quá trình uỷ quyền, Google OAuth có thể trả về lỗi. Hãy sử dụng hướng dẫn này để khắc phục những lỗi thường gặp nhất trong quá trình này.

Khắc phục sự cố

Để tìm hiểu thêm về Google OAuth, hãy xem bài viết Sử dụng OAuth 2.0 để truy cập vào API Google.

Mã làm mới liên tục hết hạn

Mã làm mới có thể ngừng hoạt động sau 7 ngày nếu mã ứng dụng không được phê duyệt. Đây là một nguyên nhân có thể xảy ra. Thời hạn 7 ngày của mã thông báo không liên quan đến việc phê duyệt Thương mại hoặc Hộp cát. Tài khoản dịch vụ hoặc tài khoản người dùng cần được phê duyệt mã ứng dụng OAuth 2.0 và đưa vào sản xuất để có thời gian tồn tại mã thông báo lâu hơn. Hãy xem phần Thời gian hết hạn của mã làm mới để biết thêm thông tin.

Truy cập bị từ chối

Nếu bạn đã thiết lập màn hình yêu cầu đồng ý OAuth trong Google Cloud và Loại người dùngBên ngoài, thì bạn sẽ gặp lỗi "Truy cập bị từ chối" nếu cố gắng liên kết tài khoản với một Tài khoản Google không có trong danh sách người dùng thử nghiệm cho ứng dụng của bạn. Hãy nhớ thêm Tài khoản Google đó vào mục Người dùng thử nghiệm trong màn hình yêu cầu đồng ý OAuth.

Lỗi Trình quản lý kết nối đối tác (PCM)

Để được trợ giúp về mọi lỗi gặp phải khi truy cập vào PCM, hãy xem Tài liệu tham khảo về lỗi của Trình quản lý mối kết nối với đối tác (PCM).

Google chưa xác minh ứng dụng này

SDM API sử dụng một phạm vi bị hạn chế, tức là mọi ứng dụng sử dụng phạm vi này trong quá trình uỷ quyền sẽ ở trạng thái "chưa được xác minh" trừ phi bạn hoàn tất quy trình Xác minh API OAuth. Khi sử dụng Device Access cho mục đích cá nhân, bạn không cần phải xác minh API OAuth.

Bạn có thể thấy màn hình "Google chưa xác minh ứng dụng này" trong quá trình uỷ quyền. Màn hình này xuất hiện nếu bạn chưa định cấu hình phạm vi sdm.service trên màn hình xin phép bằng OAuth trong Google Cloud. Bạn có thể bỏ qua màn hình này bằng cách nhấp vào lựa chọn Nâng cao, rồi nhấp vào Chuyển đến Tên dự án (không an toàn).

Hãy xem phần Màn hình ứng dụng chưa được xác minh để biết thêm thông tin.

Ứng dụng không hợp lệ

Khi cố gắng lấy mã truy cập hoặc mã làm mới, bạn sẽ gặp lỗi "Ứng dụng không hợp lệ" nếu cung cấp Khoá bí mật của ứng dụng OAuth 2.0 không chính xác. Đảm bảo rằng giá trị client_secret mà bạn đang sử dụng trong các lệnh gọi mã truy cập và mã làm mới là giá trị cho Mã ứng dụng OAuth 2.0 đang được sử dụng, như trên trang Thông tin xác thực của Google Cloud.

Yêu cầu không hợp lệ, thiếu phạm vi bắt buộc

Sau khi cấp quyền trong PCM, bạn có thể gặp phải lỗi "Yêu cầu không hợp lệ" của "Thiếu tham số bắt buộc: phạm vi". Đảm bảo rằng giá trị scope mà bạn đang dùng trong các lệnh gọi uỷ quyền giống với giá trị mà bạn đã đặt cho OAuth 2.0 Client, như trong trang Thông tin đăng nhập trên Google Cloud.

URI chuyển hướng không khớp

Khi thực hiện uỷ quyền, có thể bạn gặp phải lỗi "Redirect uri mismatch" (URI chuyển hướng không khớp). Đảm bảo rằng giá trị redirect_uri mà bạn đang dùng trong các lệnh gọi uỷ quyền giống với giá trị mà bạn đã đặt cho Ứng dụng OAuth 2.0, như trên trang Thông tin xác thực của Google Cloud.

Thông tin tham khảo nhanh

Hãy sử dụng tài liệu tham khảo này để nhanh chóng triển khai các bước uỷ quyền chouser và liên kết với Tài khoản Google của họ.

Để sử dụng thông tin tham khảo nhanh này, hãy chỉnh sửa từng biến phần giữ chỗ trong mã mẫu bằng các giá trị cho hoạt động tích hợp cụ thể của bạn, rồi sao chép và dán khi cần:

1 PCM

Chuyển user đến đường liên kết PCM trong ứng dụng của bạn, thay thế:

  1. project-id bằng Device Access Project giấy tờ tuỳ thân của bạn
  2. oauth2-client-id bằng Mã ứng dụng OAuth2 trong Thông tin đăng nhập trên Google Cloud
  3. redirect-uri có URI chuyển hướng được chỉ định cho Mã ứng dụng OAuth2 mà bạn đang dùng
  4. scope bằng một trong các phạm vi hiện có
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=redirect-uri&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/scope

2 Mã uỷ quyền

Sau khi cấp quyền thông qua PCM cho phạm vi bạn đã chọn, user sẽ được chuyển hướng đến URI chuyển hướng mà bạn chỉ định. Mã uỷ quyền được trả về dưới dạng tham số code trong URL, mã này phải có định dạng như sau:

redirect-uri?code=authorization-code&scope=https://www.googleapis.com/auth/scope

3 Mã truy cập

Sử dụng mã uỷ quyền để truy xuất mã truy cập. Bạn có thể dùng mã này để gọi SDM API thay cho người dùng.

Thực hiện lệnh gọi POST đến điểm cuối OAuth của Google, thay thế:

  1. oauth2-client-idoauth2-client-secret cùng với Mã ứng dụng OAuth2 và Khoá bí mật của ứng dụng khách trong Thông tin đăng nhập trên Google Cloud
  2. authorization-code bằng mã bạn nhận được ở bước trước
  3. redirect-uri có URI chuyển hướng được chỉ định cho Mã ứng dụng OAuth2 mà bạn đang dùng

Google OAuth trả về 2 mã thông báo, đó là mã truy cập và mã làm mới.

Yêu cầu

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&code=authorization-code&grant_type=authorization_code&redirect_uri=redirect-uri'

Phản hồi

{
  "access_token": "access-token",
  "expires_in": 3599,
  "refresh_token": "refresh-token",
  "scope": "https://www.googleapis.com/auth/scope",
  "token_type": "Bearer"
}

4 Lệnh gọi API

Quá trình uỷ quyền sẽ không hoàn tất cho đến khi bạn thực hiện một lệnh gọi API bằng mã truy cập của user. Lệnh gọi ban đầu này hoàn tất quy trình uỷ quyền và cho phép các sự kiện.

Bạn phải sử dụng một trong các lệnh gọi API được liệt kê cho phạm vi đã chỉ định để hoàn tất quá trình uỷ quyền.

sdm.service

thiết bị

Hãy xem tài liệu tham khảo về API devices.list để biết thêm thông tin.

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

5 Mã làm mới

Mã truy cập cho SDM API chỉ có hiệu lực trong 1 giờ, như đã lưu ý trong tham số expires_in do Google OAuth trả về. Nếu mã truy cập của bạn hết hạn, hãy dùng mã làm mới để lấy mã truy cập mới.

Thực hiện lệnh gọi POST đến điểm cuối OAuth của Google, thay thế:

  1. oauth2-client-idoauth2-client-secret cùng với Mã ứng dụng OAuth2 và Khoá bí mật của ứng dụng khách trong Thông tin đăng nhập trên Google Cloud
  2. refresh-token bằng mã mà bạn nhận được khi lấy mã truy cập ban đầu.

Google OAuth trả về một mã truy cập mới.

Yêu cầu

curl -L -X POST 'https://www.googleapis.com/oauth2/v4/token?client_id=oauth2-client-id&client_secret=oauth2-client-secret&refresh_token=refresh-token&grant_type=refresh_token'

Phản hồi

{
  "access_token": "new-access-token",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/scope",
  "token_type": "Bearer"
}