ข้อผิดพลาดในการให้สิทธิ์

ในระหว่างขั้นตอนการให้สิทธิ์ Google OAuth อาจแสดงข้อผิดพลาด ให้ใช้คำแนะนำนี้เพื่อแก้ปัญหาข้อผิดพลาดที่พบบ่อยที่สุดในขั้นตอนนี้

การแก้ปัญหา

ดูข้อมูลเพิ่มเติมเกี่ยวกับ OAuth ของ Google ได้ที่การใช้ OAuth 2.0 เพื่อเข้าถึง Google API

โทเค็นการรีเฟรชยังคงหมดอายุ

โทเค็นรีเฟรชอาจหยุดทํางานหลังจากผ่านไป 7 วันหากรหัสไคลเอ็นต์ไม่ได้รับอนุมัติ ซึ่งเป็นสาเหตุที่เป็นไปได้อย่างหนึ่ง การหมดอายุของโทเค็นภายใน 7 วันไม่เกี่ยวข้องกับการอนุมัติเชิงพาณิชย์หรือแซนด์บ็อกซ์ บัญชีบริการหรือบัญชีผู้ใช้ต้องได้รับอนุมัติรหัสไคลเอ็นต์ OAuth 2.0 และนำไปใช้งานจริงเพื่อให้โทเค็นมีอายุการใช้งานนานขึ้น ดูข้อมูลเพิ่มเติมได้ที่การหมดอายุของโทเค็นรีเฟรช

การเข้าถึงถูกปฏิเสธ

หากคุณตั้งค่าหน้าจอขอความยินยอม OAuth ใน Google Cloud และประเภทผู้ใช้คือภายนอก คุณจะได้รับข้อผิดพลาด "ถูกปฏิเสธการเข้าถึง" หากพยายามลิงก์บัญชีกับบัญชี Google ที่ไม่ได้แสดงเป็นผู้ใช้ทดสอบสําหรับแอปของคุณ โปรดเพิ่มบัญชี Google ลงในส่วนผู้ใช้ทดสอบในหน้าจอขอความยินยอม OAuth

ข้อผิดพลาดของเครื่องมือจัดการการเชื่อมต่อกับพาร์ทเนอร์ (PCM)

หากต้องการความช่วยเหลือเกี่ยวกับข้อผิดพลาดที่พบเมื่อเข้าถึง PCM โปรดดูข้อมูลอ้างอิงข้อผิดพลาดของเครื่องมือจัดการการเชื่อมต่อกับพาร์ทเนอร์ (PCM)

Google ยังไม่ได้ยืนยันแอปนี้

SDM API ใช้ขอบเขตที่จำกัด ซึ่งหมายความว่าแอปที่ใช้ขอบเขตนี้ในระหว่างการให้สิทธิ์จะเป็น "ไม่ได้รับการยืนยัน" เว้นแต่การตรวจสอบ OAuth API จะเสร็จสมบูรณ์ เมื่อใช้ Device Access เพื่อการใช้งานส่วนตัว คุณไม่จำเป็นต้องยืนยัน OAuth API

คุณอาจเห็นหน้าจอ "Google ยังไม่ได้ยืนยันแอปนี้" ในระหว่างกระบวนการให้สิทธิ์ ซึ่งจะปรากฏขึ้นหากไม่ได้กําหนดค่าขอบเขต sdm.service ในหน้าจอขอความยินยอม OAuth ใน Google Cloud คุณข้ามหน้าจอนี้ได้โดยการคลิกตัวเลือกขั้นสูง แล้วคลิกไปที่ Project Name (ไม่ปลอดภัย)

ดูข้อมูลเพิ่มเติมได้ที่หน้าจอแอปที่ยังไม่ได้รับการยืนยัน

ไคลเอ็นต์ไม่ถูกต้อง

เมื่อพยายามรับโทเค็นการเข้าถึงหรือโทเค็นรีเฟรช คุณจะได้รับข้อผิดพลาด "ไคลเอ็นต์ไม่ถูกต้อง" หากระบุข้อมูลลับไคลเอ็นต์ OAuth 2.0 ไม่ถูกต้อง ตรวจสอบว่าค่า client_secret ที่คุณใช้ในการเรียกโทเค็นการเข้าถึงและโทเค็นรีเฟรชเป็นค่าสำหรับรหัสไคลเอ็นต์ OAuth 2.0 ที่ใช้อยู่ตามที่แสดงในหน้าข้อมูลเข้าสู่ระบบของ Google Cloud

คำขอไม่ถูกต้อง ไม่มีขอบเขตที่จำเป็น

หลังจากให้สิทธิ์ใน PCM แล้ว คุณอาจพบข้อผิดพลาด "คำขอไม่ถูกต้อง" ว่า "ไม่มีพารามิเตอร์ที่จำเป็น: scope" ตรวจสอบว่าค่า scope ที่คุณใช้ในการเรียกการให้สิทธิ์เหมือนกับค่าที่คุณตั้งไว้สำหรับไคลเอ็นต์ OAuth 2.0 ตามที่แสดงในหน้าข้อมูลเข้าสู่ระบบ ของ Google Cloud

URI การเปลี่ยนเส้นทางไม่ตรงกัน

เมื่อดำเนินการให้สิทธิ์ คุณอาจพบข้อผิดพลาด "URI การเปลี่ยนเส้นทางไม่ตรงกัน" ตรวจสอบว่าค่า redirect_uri ที่คุณใช้ในการเรียกการให้สิทธิ์นั้นเหมือนกับค่าที่คุณตั้งไว้สำหรับไคลเอ็นต์ OAuth 2.0 ซึ่งดูได้ในหน้าข้อมูลเข้าสู่ระบบ ของ Google Cloud

ข้อมูลอ้างอิงโดยย่อ

ใช้ข้อมูลอ้างอิงนี้เพื่อทําตามขั้นตอนในการให้สิทธิ์user และลิงก์บัญชี Google อย่างรวดเร็ว

หากต้องการใช้ข้อมูลอ้างอิงฉบับย่อนี้ ให้แก้ไขตัวแปรตัวยึดตําแหน่งแต่ละรายการในตัวอย่างโค้ดด้วยค่าสําหรับการผสานรวมที่เฉพาะเจาะจง แล้วคัดลอกและวางตามต้องการ

1 PCM

นำ user ไปยังลิงก์ PCM ในแอป โดยแทนที่

  1. project-id โดยใช้รหัส Device Access Project
  2. oauth2-client-id ด้วยรหัสไคลเอ็นต์ OAuth2 จากข้อมูลเข้าสู่ระบบ Google Cloud
  3. redirect-uri ที่มี URI การเปลี่ยนเส้นทางที่ระบุสำหรับรหัสไคลเอ็นต์ OAuth2 ที่คุณใช้อยู่
  4. scope กับขอบเขตที่พร้อมใช้งาน
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 รายการ

หลังจากให้สิทธิ์ผ่าน PCM สำหรับขอบเขตที่เลือกแล้ว user ระบบควรเปลี่ยนเส้นทางไปยัง URI การเปลี่ยนเส้นทางที่ระบุ ระบบจะแสดงรหัสการให้สิทธิ์เป็นพารามิเตอร์ code ใน URL ซึ่งควรอยู่ในรูปแบบนี้

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

3 โทเค็นการเข้าถึง

ใช้รหัสการให้สิทธิ์เพื่อเรียกข้อมูลโทเค็นการเข้าถึง ซึ่งคุณใช้เรียกใช้ SDM API ในนามของผู้ใช้ได้

ทำการเรียก POST ไปยังปลายทาง OAuth ของ Google โดยแทนที่ข้อมูลต่อไปนี้

  1. oauth2-client-id และ oauth2-client-secret ด้วยรหัสไคลเอ็นต์ OAuth2 และรหัสลับไคลเอ็นต์จากข้อมูลเข้าสู่ระบบ Google Cloud
  2. authorization-code ด้วยรหัสที่คุณได้รับในขั้นตอนก่อนหน้า
  3. redirect-uri ที่มี URI การเปลี่ยนเส้นทางที่ระบุสำหรับรหัสไคลเอ็นต์ OAuth2 ที่คุณใช้อยู่

Google OAuth แสดงโทเค็น 2 รายการ ได้แก่ โทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช

ส่งคำขอ

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'

คำตอบ

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

4 การเรียก API

การให้สิทธิ์จะยังไม่เสร็จสมบูรณ์จนกว่าคุณจะเรียก API ด้วยโทเค็นเพื่อการเข้าถึงของ userการเรียกครั้งแรกนี้จะทําให้กระบวนการให้สิทธิ์เสร็จสมบูรณ์และเปิดใช้เหตุการณ์

คุณต้องใช้การเรียก API รายการใดรายการหนึ่งที่อยู่ในขอบเขตที่ระบุเพื่อให้การให้สิทธิ์เสร็จสมบูรณ์

sdm.service

อุปกรณ์

ดูข้อมูลเพิ่มเติมได้ในเอกสารอ้างอิง API ของ devices.list

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

โทเค็นการรีเฟรช 5 รายการ

โทเค็นการเข้าถึงสําหรับ SDM API จะใช้งานได้เพียง 1 ชั่วโมงเท่านั้น ตามที่ระบุไว้ในพารามิเตอร์ expires_in ที่ Google OAuth แสดง หากโทเค็นการเข้าถึงหมดอายุ ให้ใช้โทเค็นการรีเฟรชเพื่อขอโทเค็นใหม่

ทำการเรียก POST ไปยังปลายทาง OAuth ของ Google โดยแทนที่ข้อมูลต่อไปนี้

  1. oauth2-client-id และ oauth2-client-secret ด้วยรหัสไคลเอ็นต์ OAuth2 และรหัสลับไคลเอ็นต์จากข้อมูลเข้าสู่ระบบ Google Cloud
  2. refresh-token ด้วยรหัสที่คุณได้รับเมื่อตอนรับโทเค็นเพื่อการเข้าถึงครั้งแรก

Google OAuth จะแสดงโทเค็นการเข้าถึงใหม่

ส่งคำขอ

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'

คำตอบ

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