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

ในระหว่างกระบวนการให้สิทธิ์ 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 อย่างรวดเร็ว

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

นำ 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

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

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

ใช้รหัสการให้สิทธิ์เพื่อเรียกข้อมูลโทเค็นการเข้าถึง ซึ่งคุณใช้เรียกใช้ 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"
}

การให้สิทธิ์จะยังไม่เสร็จสมบูรณ์จนกว่าคุณจะเรียก 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'

โทเค็นการเข้าถึงสําหรับ 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"
}