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 các 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 của 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ách không được phê duyệt là một nguyên nhân có thể. Thời gian hết hạn của mã thông báo 7 ngày không liên quan đến việc phê duyệt cho mục đích thương mại hoặc trong 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 dài hơn. Hãy xem phần Thời gian hết hạn của mã thông báo làm mới để biết thêm thông tin.
Truy cập bị từ chối
Nếu đã thiết lập màn hình yêu cầu đồng ý OAuth trong Google Cloud và Loại người dùng là Bên ngoài, bạn sẽ gặp lỗi "Từ chối quyền truy cập" 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 liệt kê là 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 quan hệ đối tác (PCM).
Google chưa xác minh ứng dụng này
API SDM sử dụng một phạm vi bị hạn chế, nghĩa là mọi ứng dụng sử dụng phạm vi này trong quá trình uỷ quyền sẽ "chưa được xác minh" trừ khi quá trình Xác minh API OAuth đã hoàn tất. 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 sẽ xuất hiện nếu bạn không đị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 tuỳ chọn Advanced (Nâng cao), sau đó nhấp vào Chuyển đến Project Name (Tên dự án) (không an toàn).
Hãy xem Màn hình ứng dụng chưa được xác minh để biết thêm thông tin.
Ứng dụng khách 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 sai Khoá ứng dụng OAuth 2.0. Hãy đảm bảo giá trị client_secret
bạn đang sử dụng trong các lệnh gọi mã truy cập và làm mới là giá trị cho Mã ứng dụng khách OAuth 2.0 đang được sử dụng, như có trên trang Thông tin đăng nhập 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 lỗi "Yêu cầu không hợp lệ" với thông báo "Thiếu tham số bắt buộc: phạm vi". Đảm bảo rằng giá trị scope
bạn đang sử dụng trong các lệnh gọi uỷ quyền giống với giá trị bạn đã đặt cho Ứng dụng OAuth 2.0, như trong trang Thông tin xác thực Google Cloud.
URI chuyển hướng không khớp
Khi thực hiện quy trình uỷ quyền, bạn có thể gặp 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 sử dụng trong các lệnh gọi uỷ quyền giống với giá trị bạn đã đặt cho Ứng dụng OAuth 2.0, như trong trang Thông tin xác thực trên Google Cloud.
Tài liệu 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 cho mộtuser và liên kết Tài khoản Google của họ.
Để sử dụng tài liệu 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 quá trình tích hợp cụ thể của bạn, rồi sao chép và dán nếu cần:
1 PCM
Chuyển hướng user đến đường liên kết PCM trong ứng dụng, thay thế:
- project-id bằng Device Access Project mã nhận dạng
- oauth2-client-id với Mã ứng dụng khách OAuth2 trong Thông tin xác thực Google Cloud
- redirect-uri có URI chuyển hướng được chỉ định cho Mã ứng dụng khách OAuth2 mà bạn đang sử dụng
- scope với một trong các phạm vi có sẵn
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ã xác thực
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 đã chỉ định. Mã uỷ quyền được trả về dưới dạng tham số code
trong URL và phải ở định dạng 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 mà bạn có thể dùng để thay mặt người dùng gọi API SDM.
Thực hiện lệnh gọi POST đến điểm cuối OAuth của Google, thay thế:
- oauth2-client-id và oauth2-client-secret bằng Mã ứng dụng OAuth2 và Mật khẩu ứng dụng trong Thông tin đăng nhập Google Cloud
- authorization-code bằng mã mà bạn nhận được ở bước trước
- redirect-uri có URI chuyển hướng được chỉ định cho Mã ứng dụng khách OAuth2 mà bạn đang sử dụng
Google OAuth trả về hai mã thông báo, một mã truy cập và một 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 chưa hoàn tất cho đến khi bạn thực hiện lệnh gọi API bằng mã truy cập của user. Lệnh gọi ban đầu này sẽ hoàn tất quy trình uỷ quyền và bật 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 API SDM chỉ có hiệu lực trong 1 giờ, như được ghi chú 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 sử 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ế:
- oauth2-client-id và oauth2-client-secret bằng Mã ứng dụng OAuth2 và Mật khẩu ứng dụng trong Thông tin đăng nhập Google Cloud
- refresh-token bằng mã bạn nhận được khi nhận được 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" }