คำเตือน: ข้อมูลนี้มีให้ภายใต้ ผู้ใช้ Google นโยบายข้อมูล โปรดตรวจสอบและปฏิบัติตามนโยบาย หากไม่ดำเนินการดังกล่าวอาจส่งผลให้โครงการหรือบัญชีถูกระงับ

ลงชื่อเข้าใช้บนทีวีและอุปกรณ์อินพุตที่จำกัด

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

แอปจะแสดงรหัสย่อและ URL ลงชื่อเข้าใช้ให้กับผู้ใช้ จากนั้น ผู้ใช้เปิด URL การลงชื่อเข้าใช้ในเว็บเบราว์เซอร์ ป้อนรหัส และให้สิทธิ์แอปในการเข้าถึงข้อมูลการลงชื่อเข้าใช้ของผู้ใช้ สุดท้าย แอปจะได้รับการยืนยันและผู้ใช้ลงชื่อเข้าใช้

ในการใช้ขั้นตอนการลงชื่อเข้าใช้นี้ แอปต้องทำงานบนอุปกรณ์ที่ตรงตามเกณฑ์ต่อไปนี้:

  • อุปกรณ์ต้องสามารถแสดง URL 40 อักขระและรหัสผู้ใช้ 15 ตัว พร้อมด้วยคำแนะนำสำหรับผู้ใช้
  • อุปกรณ์จะต้องเชื่อมต่อกับอินเทอร์เน็ต

รับรหัสลูกค้าและข้อมูลลับลูกค้า

แอปของคุณต้องมีรหัสไคลเอ็นต์ OAuth 2.0 และรหัสลับไคลเอ็นต์เพื่อส่งคำขอไปยังปลายทางการลงชื่อเข้าใช้ของ Google

หากต้องการค้นหารหัสไคลเอ็นต์และข้อมูลลับไคลเอ็นต์ของโปรเจ็กต์ ให้ทำดังนี้:

  1. เลือกข้อมูลรับรอง OAuth 2.0 ที่มีอยู่ หรือเปิด หน้าข้อมูลรับรอง
  2. หากคุณยังไม่ได้ดำเนินการดังกล่าว ให้สร้างข้อมูลรับรอง OAuth 2.0 ของโปรเจ็กต์โดยคลิก Create credentials > OAuth client ID และระบุข้อมูลที่จำเป็นในการสร้างข้อมูลรับรอง
  3. ค้นหา รหัสไคลเอ็นต์ ในส่วน รหัสไคลเอ็นต์ OAuth 2.0 สำหรับรายละเอียด ให้คลิกรหัสลูกค้า

หากคุณกำลังสร้างรหัสไคลเอ็นต์ใหม่ ให้เลือกประเภทแอปพลิเคชัน ทีวีและอุปกรณ์อินพุตที่จำกัด

รับรหัสผู้ใช้และ URL การยืนยัน

เมื่อผู้ใช้ขอลงชื่อเข้าใช้ด้วยบัญชี Google คุณจะได้รับรหัสผู้ใช้และ URL การยืนยันโดยส่งคำขอ HTTP POST ไปยังปลายทางอุปกรณ์ OAuth 2.0 https://oauth2.googleapis.com/device/code รวมรหัสลูกค้าของคุณและรายการขอบเขตที่คุณต้องการพร้อมกับคำขอ หากคุณต้องการลงชื่อเข้าใช้เฉพาะผู้ใช้ด้วยบัญชี Google ของพวกเขา ให้ขอเฉพาะ profile และขอบเขต email หรือหากคุณต้องการขออนุญาตเรียก API ที่รองรับ ในนามของผู้ใช้ ให้ขอขอบเขตที่จำเป็นเพิ่มเติมจาก profile และขอบเขต email

ต่อไปนี้เป็นตัวอย่างคำขอรหัสผู้ใช้:

POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=CLIENT_ID&scope=email%20profile

ใช้ curl :

curl -d "client_id=CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code

การตอบสนองถูกส่งกลับเป็นวัตถุ JSON:

{
  "device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code" : "GQVQ-JKEC",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

แอปของคุณแสดงค่า user_code และ verification_url แก่ผู้ใช้ และในขณะเดียวกัน สำรวจจุดสิ้นสุดการลงชื่อเข้าใช้ตาม interval ที่ระบุ จนกว่าผู้ใช้จะลงชื่อเข้าใช้หรือเวลาที่ระบุโดย expires_in

แสดงรหัสผู้ใช้และ URL การยืนยัน

หลังจากที่คุณได้รับรหัสผู้ใช้และ URL การตรวจสอบยืนยันจากปลายทางของอุปกรณ์ ให้แสดงและแนะนำให้ผู้ใช้เปิด URL และป้อนรหัสผู้ใช้

ค่าของ verification_url และ user_code อาจเปลี่ยนแปลงได้ ออกแบบ UI ของคุณในแบบที่สามารถจัดการกับข้อจำกัดต่อไปนี้:

  • user_code ต้องแสดงในฟิลด์ที่กว้างพอที่จะรองรับอักขระขนาด 15 W
  • verification_url ต้องแสดงในฟิลด์ที่กว้างพอที่จะรองรับสตริง URL ที่มีความยาว 40 อักขระ

สตริงทั้งสองสามารถมีอักขระที่พิมพ์ได้จากชุดอักขระ US-ASCII

เมื่อคุณแสดงสตริง user_code อย่าแก้ไขสตริงไม่ว่าด้วยวิธีใดๆ (เช่น การเปลี่ยนตัวพิมพ์หรือแทรกอักขระการจัดรูปแบบอื่นๆ) เนื่องจากแอปของคุณอาจใช้งานไม่ได้หากรูปแบบของโค้ดเปลี่ยนแปลงในอนาคต

คุณสามารถแก้ไขสตริง verification_url ได้โดยการตัดโครงร่างออกจาก URL เพื่อวัตถุประสงค์ในการแสดง หากคุณเลือก หากเป็นเช่นนั้น ตรวจสอบให้แน่ใจว่าแอปของคุณรองรับทั้งรูปแบบ "http" และ "https" ห้ามแก้ไขสตริง verification_url

เมื่อผู้ใช้ไปที่ URL การยืนยัน พวกเขาจะเห็นหน้าที่คล้ายกับต่อไปนี้:

เชื่อมต่ออุปกรณ์โดยป้อนรหัส

หลังจากที่ผู้ใช้ป้อนรหัสผู้ใช้ ไซต์ลงชื่อเข้าใช้ของ Google จะแสดงหน้าจอคำยินยอมที่คล้ายกับต่อไปนี้:

ตัวอย่างหน้าจอยินยอมสำหรับไคลเอ็นต์อุปกรณ์

หากผู้ใช้คลิก อนุญาต แอปของคุณจะได้รับโทเค็น ID เพื่อระบุผู้ใช้ โทเค็นการเข้าถึงเพื่อเรียกใช้ Google API และโทเค็นการรีเฟรชเพื่อรับโทเค็นใหม่

รับโทเค็น ID และรีเฟรชโทเค็น

หลังจากที่แอปของคุณแสดงรหัสผู้ใช้และ URL การยืนยัน ให้เริ่มสำรวจจุดสิ้นสุดโทเค็น ( https://oauth2.googleapis.com/token ) ด้วยรหัสอุปกรณ์ที่คุณได้รับจากปลายทางของอุปกรณ์ สำรวจจุดสิ้นสุดของโทเค็นในช่วงเวลาเป็นวินาที ที่ระบุโดยค่า interval

ต่อไปนี้เป็นตัวอย่างคำขอ:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0

ใช้ curl :

curl -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token

หากผู้ใช้ยังไม่อนุมัติคำขอ คำตอบจะเป็นดังนี้:

{
  "error" : "authorization_pending"
}

แอปของคุณควรทำซ้ำคำขอเหล่านี้ในอัตราที่ไม่เกินค่าของ interval หากแอปของคุณโพลเร็วเกินไป การตอบสนองจะเป็นดังนี้:

{
  "error" : "slow_down"
}

เมื่อผู้ใช้ลงชื่อเข้าใช้และให้สิทธิ์แอปของคุณเข้าถึงขอบเขตที่คุณร้องขอ การตอบกลับคำขอถัดไปของแอปจะรวมโทเค็น ID โทเค็นการเข้าถึง และโทเค็นการรีเฟรช:

{
  "access_token" : "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
  "id_token": "eyJhbGciOiJSUzI..."
}

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

ID และโทเค็นการเข้าถึงมีอายุการใช้งานที่จำกัด เพื่อให้ผู้ใช้ลงชื่อเข้าใช้เกินอายุโทเค็น ให้เก็บโทเค็นการรีเฟรชและใช้เพื่อ ขอโทเค็นใหม่

รับข้อมูลโปรไฟล์ผู้ใช้จากโทเค็น ID

คุณสามารถรับข้อมูลโปรไฟล์เกี่ยวกับผู้ใช้ที่ลงชื่อเข้าใช้โดยการถอดรหัสโทเค็น ID ด้วย ไลบรารีถอดรหัส JWT ตัวอย่างเช่น การใช้ไลบรารี JavaScript Auth0 jwt-decode JavaScript:

var user_profile = jwt_decode(id_token);

// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];

// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];

ข้อมูลมากกว่านี้