ในระหว่างกระบวนการให้สิทธิ์ 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 ในแอป โดยแทนที่
- project-id พร้อม Device Access Project บัตรประจำตัว
- oauth2-client-id โดยใช้รหัสไคลเอ็นต์ OAuth2 จาก Google Cloud ข้อมูลเข้าสู่ระบบ
- redirect-uri โดยมี URI เปลี่ยนเส้นทางที่ระบุไว้สำหรับ รหัสไคลเอ็นต์ OAuth2 ที่คุณใช้
- 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 โดยแทนที่ข้อมูลต่อไปนี้
- oauth2-client-id และ oauth2-client-secret พร้อมรหัสไคลเอ็นต์ OAuth2 และรหัสลับไคลเอ็นต์จาก Google Cloud Credentials
- authorization-code โดยใช้รหัสที่คุณได้รับในขั้นตอนก่อนหน้า
- 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 โดยแทนที่ข้อมูลต่อไปนี้
- oauth2-client-id และ oauth2-client-secret พร้อมรหัสไคลเอ็นต์ OAuth2 และรหัสลับไคลเอ็นต์จาก Google Cloud Credentials
- 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" }