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

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

การแก้ปัญหา

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

โทเค็นการรีเฟรชหมดอายุอยู่เรื่อยๆ

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

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

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

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

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

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

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

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

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

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

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

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

หลังจากให้สิทธิ์ใน PCM แล้ว คุณอาจพบข้อผิดพลาด "คำขอไม่ถูกต้อง" ของ "พารามิเตอร์ที่จำเป็นหายไป: ขอบเขต" ตรวจสอบว่าค่า 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 Credentials
  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 Credentials
  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"
}