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

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

การแก้ปัญหา

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

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

โทเค็นการรีเฟรชอาจหยุดทำงานหลังจากผ่านไป 7 วันหากรหัสไคลเอ็นต์ไม่ได้รับการอนุมัติ ซึ่งเป็นสาเหตุหนึ่งที่อาจเกิดขึ้นได้ การหมดอายุของโทเค็นใน 7 วันไม่เกี่ยวข้องกับการอนุมัติเพื่อการใช้งานเชิงพาณิชย์หรือการอนุมัติ Sandbox บัญชีบริการหรือบัญชีผู้ใช้ต้องได้รับการอนุมัติรหัสไคลเอ็นต์ 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 คุณข้ามหน้าจอนี้ได้โดยคลิกตัวเลือกขั้นสูง แล้วคลิกไปที่ ชื่อโปรเจ็กต์ (ไม่ปลอดภัย)

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

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

เมื่อพยายามรับโทเค็นเพื่อการเข้าถึงหรือโทเค็นการรีเฟรช คุณจะได้รับข้อผิดพลาด "ไคลเอ็นต์ไม่ถูกต้อง" หากระบุรหัสลับไคลเอ็นต์ 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

นำผู้ใช้ไปยังลิงลิงก์ PCM ในแอปของคุณ โดยแทนที่ข้อมูลต่อไปนี้ user

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