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

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

การแก้ปัญหา

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

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

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

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

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

ข้อผิดพลาด Partner Connections Manager (PCM)

สำหรับความช่วยเหลือเกี่ยวกับข้อผิดพลาดที่พบเมื่อเข้าถึง PCM โปรดดูข้อมูลอ้างอิงข้อผิดพลาดของเครื่องมือจัดการการเชื่อมต่อกับพาร์ทเนอร์ (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" ตรวจสอบว่าค่า 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

โทเค็นเพื่อการเข้าถึง

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