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