Google มุ่งมั่นที่จะพัฒนาความเท่าเทียมทางเชื้อชาติให้กับชุมชนคนผิวดำ ดูวิธีการ

Google Sign-In สำหรับทีวีและอุปกรณ์

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

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

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

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

รับรหัสลูกค้าและข้อมูลลับของไคลเอ็นต์

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

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

  1. เลือกข้อมูลรับรอง OAuth 2.0 ที่มีอยู่ หรือเปิด หน้าข้อมูลรับรอง
  2. หากคุณยังไม่ได้ดำเนินการให้สร้างข้อมูลรับรอง OAuth 2.0 ของโปรเจ็กต์โดยคลิก สร้างข้อมูลรับรอง> รหัสไคลเอ็นต์ OAuth และระบุข้อมูลที่จำเป็นในการสร้างข้อมูลรับรอง
  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 ต้องแสดงในฟิลด์ที่กว้างพอที่จะรองรับอักขระขนาด W 15 ตัว
  • 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 ตัวอย่างเช่นการใช้ไลบรารี 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"];

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