Uỷ quyền tài khoản

Khi tạo các dự án về Google Cloud và Quyền truy cập thiết bị, bạn có thể cấp quyền truy cập vào một Tài khoản Google trên thiết bị Google Nest được hỗ trợ để API SDM.

Để xem cấu trúc và thiết bị, bạn phải liên kết một Tài khoản Google với Device Access dự án bằng PCM. PCM cho phép user cấp quyền cho cho phép developertruy cập vào cấu trúc và dữ liệu thiết bị của chúng.

Trong hướng dẫn này, bạn đóng vai trò là cả user và developer.

  1. Mở đường liên kết sau đây trong một trang web trình duyệt, thay thế:

    1. project-id bằng Device Access Project mã nhận dạng
    2. oauth2-client-id bằng mã ứng dụng OAuth2 từ Google Cloud Thông tin đăng nhập
    https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/sdm.service
    
  2. Nếu gần đây bạn đã đăng nhập vào Google bằng nhiều tài khoản, bạn có thể hiển thị màn hình ban đầu Chọn tài khoản với danh sách Tài khoản Google. Nếu có, hãy chọn Tài khoản Google được liên kết với(các) thiết bị mà bạn muốn cấp phép cho Device Access.
  3. Màn hình Quyền đối với các thiết bị Google Nest chính là PCM. Tại đây, bạn có thể cấp quyền cho cấu trúc và thiết bị. Bật các quyền đối với nhà bạn (Bước 1) và mọi thiết bị trong nhà đó được API SDM hỗ trợ (Bước 2), sau đó nhấp vào Tiếp theo.
  4. Trên màn hình Chọn một tài khoản để tiếp tục đến Tên dự án, trong đó Tên dự án là tên dự án Google Cloud của bạn, hãy chọn Tài khoản Google mà bạn muốn uỷ quyền cho API SDM. Sử dụng cùng một Tài khoản Google như trước đây.
  5. Sau khi chọn một tài khoản, bạn có thể thấy một màn hình cảnh báo cho biết Google chưa xác minh ứng dụng này. Nếu có, để tiếp tục, hãy nhấp vào Nâng cao rồi nhấp vào Chuyển đến Tên dự án (không an toàn). Xem Google chưa xác minh ứng dụng này cho các mục khác của bạn.
  6. Trên màn hình Cấp quyền Project Name (Cấp quyền cho Project Name), hãy nhấp vào Allow (Cho phép) để cấp quyền truy cập vào Tài khoản Google của bạn cho dự án.
  7. Trên màn hình Xác nhận lựa chọn của bạn, hãy đảm bảo các quyền mà bạn muốn chọn cấp quyền rồi nhấp vào Cho phép để xác nhận.
  8. Bạn phải được chuyển hướng đến https://www.google.com. Mã uỷ quyền được trả về dưới dạng tham số code trong URL, phải ở định dạng sau:

    https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service
    
  9. Sao chép mã uỷ quyền.

Lấy 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 để gọi API SDM.

  1. Mở một cửa sổ dòng lệnh và chạy lệnh curl sau, thay thế:

    1. oauth2-client-idoauth2-client-secret bằng Mã ứng dụng khách OAuth2 và Mật khẩu ứng dụng khách từ Google Cloud Thông tin xác thực
    2. authorization-code bằng mã mà bạn nhận được ở bước trước
    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=https://www.google.com'
    
  2. Google OAuth trả về hai mã thông báo: một mã truy cập và một mã làm mới.

    {
      "access_token": "access-token",
      "expires_in": 3599,
      "refresh_token": "refresh-token",
      "scope": "https://www.googleapis.com/auth/sdm.service",
      "token_type": "Bearer"
    }
    Sao chép cả hai giá trị này. Mã truy cập được dùng để gọi API SDM và mã làm mới được dùng để lấy mã truy cập mới.

Gọi điện cho danh sách thiết bị

Quá trình uỷ quyền sẽ chưa hoàn tất cho đến khi bạn thực hiện lệnh gọi devices.list đầu tiên bằng mã truy cập mới. 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 nếu bạn đã thiết lập gói thuê bao Pub/Sub.

Sử dụng curl để thực hiện lệnh gọi này cho điểm cuối devices:

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

Một lệnh gọi thành công sẽ trả về danh sách các thiết bị được liên kết với dự án Device Accesscủa bạn. Mỗi thiết bị đều có danh sách đặc điểm riêng biệt:

{
  "devices": [
    {
      "name": "enterprises/project-id/devices/device-id",
      "type": "sdm.devices.types.device-type",
      "traits": { ... },
      "parentRelations": [
        {
          "parent": "enterprises/project-id/structures/structure-id/rooms/room-id",
          "displayName": "device-room-name"
        }
      ]
    }
  ]
}

Cách sử dụng mã thông báo 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ã mới.

Lệnh này tương tự như lệnh mã thông báo truy cập, ngoại trừ việc bạn sử dụng một grant_type khác.

  1. Mở cửa sổ dòng lệnh và chạy sau đây là lệnh curl, thay thế:

    1. oauth2-client-idoauth2-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
    2. refresh-token bằng mã bạn nhận được khi nhận được mã truy cập ban đầ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'
    
  2. Google OAuth trả về một mã truy cập mới.

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

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ã thông báo 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. Thời hạn của mã thông báo 7 ngày không liên quan đến thẻ 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ã thông báo 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 xin phép bằng OAuth trong Google Cloud và Loại người dùngBên ngoài, thì bạn sẽ nhận được thông báo "Quyền truy cập bị từ chối" lỗi nếu bạn 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 mình. Nhớ thêm Tài khoản Google vào phần Người dùng thử nghiệm trong màn hình xin phép bằng OAuth.

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

Để được trợ giúp về bất kỳ lỗi nào gặp phải khi truy cập PCM, xem Trình quản lý kết nối đối tác (PCM) Tham chiếu đến lỗi.

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

SDM API sử dụng phạm vi bị hạn chế, tức là bất kỳ ứng dụng sử dụng phạm vi này trong thời gian được cấp phép sẽ "chưa được xác minh" trừ phi Đã hoàn tất quá trình Xác minh API qua 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 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 Go to Project Name (unsafe) (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.

Khách hà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ẽ nhận được thông báo "Không hợp lệ khách hàng" nếu bạn cung cấp Mật khẩu ứng dụng khách OAuth 2.0 không chính xác. Hãy đảm bảo rằng Giá trị client_secret mà bạn đang sử dụng trong lệnh truy cập và làm mới mã thông báo chính là giá trị cho Mã ứng dụng khách OAuth 2.0 đang được sử dụng, như có trong Google Cloud Thông tin đăng nhập .

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

Trong quá trình uỷ quyền, bạn có thể gặp lỗi "Chuyển hướng URI không khớp" . Hãy đảm bảo giá trị redirect_uri bạn đang sử dụng trong lệnh gọi uỷ quyền được giống như mã bạn đặt cho Ứng dụng OAuth 2.0, như được tìm thấy trong Google Cloud Thông tin đăng nhập .

Sửa đổi quyền đối với tài khoản

Để sửa đổi các quyền được cấp cho dự án Device Access hoặc ngắt kết nối hoàn toàn dự án đó, hãy chuyển đến PCM:

https://nestservices.google.com/partnerconnections

Trang này hiển thị tất cả dịch vụ dành cho nhà phát triển bên thứ ba (dự ánDevice Access ) được kết nối với tài khoản của bạn. Chọn dự án Device Access mà bạn muốn thay đổi. Sử dụng màn hình tiếp theo để sửa đổi quyền theo ý muốn.

Để chỉ thu hồi một số quyền cụ thể cho một dịch vụ được uỷ quyền, hãy bật/tắt các quyền mà bạn muốn thu hồi rồi nhấp vào mũi tên quay lại để lưu.

Để ngắt kết nối hoàn toàn với một dịch vụ được uỷ quyền, hãy nhấp vào Huỷ liên kết Tài khoản Google của bạn để thu hồi tất cả quyền và mã truy cập mà dự án đã được cấp cho tài khoản.

Nếu PCM không hiển thị dịch vụ mong muốn, trước tiên, bạn có thể phải thực hiện lệnh gọi danh sách thiết bị.

Tài liệu tham khảo nhanh

Sử dụng tài liệu tham khảo này để triển khai nhanh các bước nhằm cấp quyền user và liên kết Tài khoản Google của họ của Google.

Để 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 các mã mẫu bằng các giá trị cho chế độ tích hợp cụ thể của bạn, rồi sao chép và dán nếu cần:

1 PCM

Mở đường liên kết sau đây trong một trang web trình duyệt, thay thế:

  1. project-id có mã nhận dạng Device Access Project của bạn
  2. oauth2-client-id bằng mã ứng dụng OAuth2 từ Google Cloud Thông tin đăng nhập
https://nestservices.google.com/partnerconnections/project-id/auth?redirect_uri=https://www.google.com&access_type=offline&prompt=consent&client_id=oauth2-client-id&response_type=code&scope=https://www.googleapis.com/auth/sdm.service

2 Mã xác thực

Bạn phải được chuyển hướng đến https://www.google.com. Mã uỷ quyền được trả về dưới dạng tham số code trong URL, phải ở định dạng sau:

https://www.google.com?code=authorization-code&scope=https://www.googleapis.com/auth/sdm.service

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 để gọi API SDM.

Mở cửa sổ dòng lệnh rồi chạy lệnh curl sau đây để thay thế:

  1. oauth2-client-idoauth2-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
  2. authorization-code bằng mã bạn nhận được ở bước trước

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=https://www.google.com'

Phản hồi

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

4 Lệnh gọi API

Quá trình uỷ quyền sẽ chưa hoàn tất cho đến khi bạn thực hiện lệnh gọi devices.list đầu tiên bằng mã truy cập mới. 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 nếu bạn đã thiết lập gói thuê bao Pub/Sub.

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ã mới.

Mở cửa sổ dòng lệnh và chạy sau đây là lệnh curl, thay thế:

  1. oauth2-client-idoauth2-client-secret bằng Mã ứng dụng khách OAuth2 và Mật khẩu ứng dụng khách từ Google Cloud Thông tin xác thực
  2. refresh-token kèm theo mã mà bạn nhận được khi bắt đầu có quyền truy cập mã thông báo.

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/sdm.service",
  "token_type": "Bearer"
}