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

รูปที่ 1 การลิงก์บัญชีในโทรศัพท์ของผู้ใช้ด้วยการลิงก์ที่มีประสิทธิภาพยิ่งขึ้น
ข้อกําหนดสําหรับการลิงก์ที่มีประสิทธิภาพ
- ใช้ขั้นตอนการลิงก์ OAuth สําหรับเว็บพื้นฐาน บริการของคุณต้องรองรับปลายทางการให้สิทธิ์ที่เป็นไปตามข้อกําหนด OAuth 2.0 และโทเค็นการแลกเปลี่ยน
- ปลายทาง token Exchange ต้องรองรับการยืนยัน JSON Web Token (JWT) และใช้ Intent ของ
check
,create
และget
ใช้งานเซิร์ฟเวอร์ OAuth
ปลายทาง token Exchange ต้องรองรับ Intent check
, create
และ get
ด้านล่างนี้จะแสดงขั้นตอนที่ทําผ่านขั้นตอนการลิงก์บัญชี และระบุเวลาที่เรียกใช้ Intent ต่างๆ
- ผู้ใช้มีบัญชีในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
- ใช่ : ผู้ใช้ได้ใช้อีเมลที่เชื่อมโยงกับบัญชี Google เพื่อลงชื่อเข้าใช้แพลตฟอร์มของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
- ใช่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (
check intent
จะถูกเรียกใช้เพื่อยืนยัน)- ใช่ : ระบบจะเรียกใช้
get intent
และบัญชีจะลิงก์บัญชีหากรับ Intent คืนสําเร็จ - ไม่ : สร้างบัญชีใหม่ใช่ไหม (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
- ใช่ : ระบบจะเรียกใช้
create intent
และลิงก์บัญชีเมื่อสร้าง Intent สําเร็จ - ไม่ : จะมีการทริกเกอร์ขั้นตอน OAuth เว็บ ระบบจะนําผู้ใช้ไปยังเบราว์เซอร์ของผู้ใช้ และผู้ใช้มีตัวเลือกในการลิงก์กับอีเมลอื่น
- ใช่ : ระบบจะเรียกใช้
- ใช่ : ระบบจะเรียกใช้
- ไม่ จะมีการเรียกขั้นตอน OAuth สําหรับเว็บ ซึ่งระบบจะเปลี่ยนเส้นทางให้ผู้ใช้ไปที่เบราว์เซอร์ และผู้ใช้จะมีตัวเลือกให้ลิงก์กับอีเมลอื่นได้
- ใช่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (
- ไม่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (
check intent
จะถูกเรียกใช้เพื่อยืนยัน)- ใช่ : ระบบจะเรียกใช้
get intent
และบัญชีจะลิงก์บัญชีหากรับ Intent คืนสําเร็จ - ไม่ : ระบบจะเรียกใช้
create intent
และระบบจะลิงก์บัญชีหากสร้าง Intent สําเร็จ
- ใช่ : ระบบจะเรียกใช้
- ใช่ : ผู้ใช้ได้ใช้อีเมลที่เชื่อมโยงกับบัญชี Google เพื่อลงชื่อเข้าใช้แพลตฟอร์มของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
Check for an existing user account (check intent)
After the user gives consent to access their Google profile, Google sends a request that contains a signed assertion of the Google user's identity. The assertion contains information that includes the user's Google Account ID, name, and email address. The token exchange endpoint configured for your project handles that request.
If the corresponding Google account is already present in your authentication
system, your token exchange endpoint responds with account_found=true
. If the
Google account doesn't match an existing user, your token exchange endpoint
returns an HTTP 404 Not Found error with account_found=false
.
The request has the following form:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=check&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET
Your token exchange endpoint must be able to handle the following parameters:
Token endpoint parameters | |
---|---|
intent |
For these requests, the value of this parameter is
check . |
grant_type |
The type of token being exchanged. For these requests, this
parameter has the value urn:ietf:params:oauth:grant-type:jwt-bearer . |
assertion |
A JSON Web Token (JWT) that provides a signed assertion of the Google user's identity. The JWT contains information that includes the user's Google Account ID, name, and email address. |
client_id |
The client ID you assigned to Google. |
client_secret |
The client secret you assigned to Google. |
To respond to the check
intent requests, your token exchange endpoint must perform the following steps:
- Validate and decode the JWT assertion.
- Check if the Google account is already present in your authentication system.
ตรวจสอบและถอดรหัสการยืนยัน JWT
คุณสามารถตรวจสอบและถอดรหัสการยืนยัน JWT ได้โดยใช้ ไลบรารีการถอดรหัส JWT สำหรับภาษาของคุณ ใช้คีย์สาธารณะของ Google ซึ่งมีให้ในรูปแบบ JWK หรือ PEM เพื่อตรวจสอบลายเซ็นของโทเค็น
เมื่อถอดรหัสการยืนยัน JWT จะมีลักษณะดังตัวอย่างต่อไปนี้:
{ "sub": "1234567890", // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "email_verified": true, // true, if Google has verified the email address "hd": "example.com", // If present, the host domain of the user's GSuite email address // If present, a URL to user's profile picture "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ", "locale": "en_US" // User's locale, from browser or phone settings }
นอกจากนี้ในการตรวจสอบลายเซ็นของโทเค็นการตรวจสอบว่า บริษัท ผู้ออกหลักทรัพย์ยืนยันของ ( iss
ฟิลด์) เป็น https://accounts.google.com
ว่าผู้ชม ( aud
ฟิลด์) เป็นรหัสลูกค้าที่ได้รับมอบหมายของคุณและที่โทเค็นยังไม่หมดอายุ ( exp
ฟิลด์).
การใช้ช่อง email
email_verified
และ hd
เพื่อตรวจสอบว่า Google โฮสต์และเชื่อถือได้สำหรับที่อยู่อีเมล ในกรณีที่ Google มีสิทธิ์ในขณะนี้ผู้ใช้ทราบว่าเป็นเจ้าของบัญชีที่ถูกต้องและคุณสามารถข้ามรหัสผ่านหรือวิธีการท้าทายอื่น ๆ ได้ มิฉะนั้นสามารถใช้วิธีการเหล่านี้เพื่อยืนยันบัญชีก่อนการเชื่อมโยง
กรณีที่ Google เชื่อถือได้:
-
email
มีคำต่อท้าย@gmail.com
นี่คือบัญชี Gmail -
email_verified
เป็นจริงและตั้งค่าhd
แล้วนี่คือบัญชี G Suite
ผู้ใช้สามารถลงทะเบียนบัญชี Google ได้โดยไม่ต้องใช้ Gmail หรือ G Suite เมื่อ email
ไม่มีคำต่อท้าย @gmail.com
และ hd
ไม่มี Google ไม่ได้รับอนุญาตและขอแนะนำให้ใช้รหัสผ่านหรือวิธีการท้าทายอื่น ๆ ในการยืนยันผู้ใช้ email_verfied
อาจเป็นจริงได้เช่นกันเนื่องจาก Google ได้ยืนยันผู้ใช้ในตอนแรกเมื่อสร้างบัญชี Google อย่างไรก็ตามความเป็นเจ้าของบัญชีอีเมลของบุคคลที่สามอาจมีการเปลี่ยนแปลง
Check if the Google account is already present in your authentication system
Check whether either of the following conditions are true:
- The Google Account ID, found in the assertion's
sub
field, is in your user database. - The email address in the assertion matches a user in your user database.
If either condition is true, the user has already signed up. In that case, return a response like the following:
HTTP/1.1 200 Success Content-Type: application/json;charset=UTF-8 { "account_found":"true", }
If neither the Google Account ID nor the email address specified in the
assertion matches a user in your database, the user hasn't signed up yet. In
this case, your token exchange endpoint needs to reply with a HTTP 404 error
that specifies "account_found": "false"
, as in the following example:
HTTP/1.1 404 Not found Content-Type: application/json;charset=UTF-8 { "account_found":"false", }
จัดการกับการลิงก์อัตโนมัติ (รับความตั้งใจ)
หลังจากผู้ใช้ให้คํายินยอมในการเข้าถึงโปรไฟล์ Google แล้ว Google จะส่งคําขอที่มีการยืนยันข้อมูลประจําตัวของผู้ใช้ Google ที่ลงชื่อแล้ว ข้อความยืนยันประกอบด้วยรหัสบัญชี ชื่อ และอีเมลใน Google ของผู้ใช้ ปลายทางของการแลกเปลี่ยนโทเค็นที่กําหนดค่าไว้สําหรับโปรเจ็กต์จะจัดการคําขอนั้น
หากมีบัญชี Google ที่เกี่ยวข้องอยู่ในระบบการตรวจสอบสิทธิ์แล้ว ปลายทางการแลกเปลี่ยนโทเค็นจะแสดงผลโทเค็นให้ผู้ใช้ หากบัญชี Google ไม่ตรงกับผู้ใช้ที่มีอยู่ ปลายทางการแลกเปลี่ยนโทเค็นจะแสดงข้อผิดพลาด linking_error
และไม่บังคับ login_hint
คําขอจะมีรูปแบบต่อไปนี้
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET
ปลายทางของการแลกเปลี่ยนโทเค็นของคุณต้องสามารถจัดการพารามิเตอร์ต่อไปนี้
พารามิเตอร์ปลายทางของโทเค็น | |
---|---|
intent |
สําหรับคําขอเหล่านี้ ค่าของพารามิเตอร์นี้คือ get |
grant_type |
ประเภทของโทเค็นที่แลกเปลี่ยน สําหรับคําขอเหล่านี้ พารามิเตอร์นี้มีค่า urn:ietf:params:oauth:grant-type:jwt-bearer |
assertion |
โทเค็นเว็บ JSON (JWT) ที่ยืนยันตัวตนผู้ใช้ของ Google พร้อมลงนาม JWT มีข้อมูลที่รวมรหัสบัญชี Google, ชื่อ และอีเมลของ Google |
scope |
ไม่บังคับ: ขอบเขตทั้งหมดที่คุณกําหนดค่าให้ Google ขอจากผู้ใช้ |
client_id |
รหัสไคลเอ็นต์ที่คุณกําหนดให้ Google |
client_secret |
รหัสลับไคลเอ็นต์ที่คุณกําหนดให้ Google |
ในการตอบสนองต่อคําขอ Intent ของ get
ปลายทางของการแลกเปลี่ยนโทเค็นของคุณจะต้องทําตามขั้นตอนต่อไปนี้
- ตรวจสอบและถอดรหัสการยืนยัน JWT
- ตรวจสอบว่าบัญชี Google ดังกล่าวอยู่ในระบบการตรวจสอบสิทธิ์แล้วหรือไม่
ตรวจสอบและถอดรหัสการยืนยัน JWT
คุณสามารถตรวจสอบและถอดรหัสการยืนยัน JWT ได้โดยใช้ ไลบรารีการถอดรหัส JWT สำหรับภาษาของคุณ ใช้คีย์สาธารณะของ Google ซึ่งมีให้ในรูปแบบ JWK หรือ PEM เพื่อตรวจสอบลายเซ็นของโทเค็น
เมื่อถอดรหัสการยืนยัน JWT จะมีลักษณะดังตัวอย่างต่อไปนี้:
{ "sub": "1234567890", // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "email_verified": true, // true, if Google has verified the email address "hd": "example.com", // If present, the host domain of the user's GSuite email address // If present, a URL to user's profile picture "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ", "locale": "en_US" // User's locale, from browser or phone settings }
นอกจากนี้ในการตรวจสอบลายเซ็นของโทเค็นการตรวจสอบว่า บริษัท ผู้ออกหลักทรัพย์ยืนยันของ ( iss
ฟิลด์) เป็น https://accounts.google.com
ว่าผู้ชม ( aud
ฟิลด์) เป็นรหัสลูกค้าที่ได้รับมอบหมายของคุณและที่โทเค็นยังไม่หมดอายุ ( exp
ฟิลด์).
การใช้ช่อง email
email_verified
และ hd
เพื่อตรวจสอบว่า Google โฮสต์และเชื่อถือได้สำหรับที่อยู่อีเมล ในกรณีที่ Google มีสิทธิ์ในขณะนี้ผู้ใช้ทราบว่าเป็นเจ้าของบัญชีที่ถูกต้องและคุณสามารถข้ามรหัสผ่านหรือวิธีการท้าทายอื่น ๆ ได้ มิฉะนั้นสามารถใช้วิธีการเหล่านี้เพื่อยืนยันบัญชีก่อนการเชื่อมโยง
กรณีที่ Google เชื่อถือได้:
-
email
มีคำต่อท้าย@gmail.com
นี่คือบัญชี Gmail -
email_verified
เป็นจริงและตั้งค่าhd
แล้วนี่คือบัญชี G Suite
ผู้ใช้สามารถลงทะเบียนบัญชี Google ได้โดยไม่ต้องใช้ Gmail หรือ G Suite เมื่อ email
ไม่มีคำต่อท้าย @gmail.com
และ hd
ไม่มี Google ไม่ได้รับอนุญาตและขอแนะนำให้ใช้รหัสผ่านหรือวิธีการท้าทายอื่น ๆ ในการยืนยันผู้ใช้ email_verfied
อาจเป็นจริงได้เช่นกันเนื่องจาก Google ได้ยืนยันผู้ใช้ในตอนแรกเมื่อสร้างบัญชี Google อย่างไรก็ตามความเป็นเจ้าของบัญชีอีเมลของบุคคลที่สามอาจมีการเปลี่ยนแปลง
ตรวจสอบว่ามีบัญชี Google อยู่ในระบบการตรวจสอบสิทธิ์แล้วหรือไม่
ตรวจสอบว่าเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้เป็นจริงหรือไม่
- รหัสบัญชี Google ที่พบในช่อง
sub
การยืนยันอยู่ในฐานข้อมูลผู้ใช้ของคุณ - อีเมลในโปรแกรมยืนยันตรงกับผู้ใช้ในฐานข้อมูลผู้ใช้
หากพบบัญชีของผู้ใช้ ให้ออกโทเค็นเพื่อการเข้าถึงแล้วแสดงผลค่าในออบเจ็กต์ JSON ในส่วนเนื้อหาของการตอบกลับ HTTPS ดังตัวอย่างต่อไปนี้
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
ในบางกรณี การลิงก์บัญชีตามโทเค็นรหัสอาจล้มเหลวสําหรับผู้ใช้ หากเป็นเช่นนั้น ปลายทางของการแลกเปลี่ยนโทเค็นของคุณจะต้องตอบกลับโดยมีข้อผิดพลาด HTTP 401 ซึ่งระบุ error=linking_error
ตามตัวอย่างต่อไปนี้
HTTP/1.1 401 Unauthorized Content-Type: application/json;charset=UTF-8 { "error":"linking_error", "login_hint":"foo@bar.com" }
เมื่อ Google ได้รับการตอบกลับข้อผิดพลาด 401 กับ linking_error
Google จะส่งผู้ใช้ไปยังปลายทางการให้สิทธิ์ที่มี login_hint
เป็นพารามิเตอร์ ผู้ใช้ลิงก์บัญชีให้เสร็จสมบูรณ์โดยใช้ขั้นตอนการลิงก์ OAuth ในเบราว์เซอร์
จัดการการสร้างบัญชีผ่าน Google Sign-In (สร้างความตั้งใจ)
เมื่อผู้ใช้ต้องสร้างบัญชีในบริการของคุณ Google จะส่งคําขอไปยังปลายทางการแลกเปลี่ยนโทเค็นที่ระบุ intent=create
คําขอจะมีรูปแบบต่อไปนี้
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded response_type=token&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=SCOPES&intent=create&assertion=JWT&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET
ปลายทางของการแลกเปลี่ยนโทเค็นของคุณต้องจัดการกับพารามิเตอร์ต่อไปนี้
พารามิเตอร์ปลายทางของโทเค็น | |
---|---|
intent |
สําหรับคําขอเหล่านี้ ค่าของพารามิเตอร์นี้คือ create |
grant_type |
ประเภทของโทเค็นที่แลกเปลี่ยน สําหรับคําขอเหล่านี้ พารามิเตอร์นี้มีค่า urn:ietf:params:oauth:grant-type:jwt-bearer |
assertion |
โทเค็นเว็บ JSON (JWT) ที่ยืนยันตัวตนผู้ใช้ของ Google พร้อมลงนาม JWT มีข้อมูลที่รวมรหัสบัญชี Google, ชื่อ และอีเมลของ Google |
client_id |
รหัสไคลเอ็นต์ที่คุณกําหนดให้ Google |
client_secret |
รหัสลับไคลเอ็นต์ที่คุณกําหนดให้ Google |
JWT ภายในพารามิเตอร์ assertion
มีรหัสบัญชี Google, ชื่อ และอีเมลของ Google ซึ่งคุณสามารถใช้ในการสร้างบัญชีใหม่ในบริการของคุณ
ในการตอบสนองต่อคําขอ Intent ของ create
ปลายทางของการแลกเปลี่ยนโทเค็นของคุณจะต้องทําตามขั้นตอนต่อไปนี้
- ตรวจสอบและถอดรหัสการยืนยัน JWT
- ตรวจสอบข้อมูลผู้ใช้และสร้างบัญชีใหม่
ตรวจสอบและถอดรหัสการยืนยัน JWT
คุณสามารถตรวจสอบและถอดรหัสการยืนยัน JWT ได้โดยใช้ ไลบรารีการถอดรหัส JWT สำหรับภาษาของคุณ ใช้คีย์สาธารณะของ Google ซึ่งมีให้ในรูปแบบ JWK หรือ PEM เพื่อตรวจสอบลายเซ็นของโทเค็น
เมื่อถอดรหัสการยืนยัน JWT จะมีลักษณะดังตัวอย่างต่อไปนี้:
{ "sub": "1234567890", // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "email_verified": true, // true, if Google has verified the email address "hd": "example.com", // If present, the host domain of the user's GSuite email address // If present, a URL to user's profile picture "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ", "locale": "en_US" // User's locale, from browser or phone settings }
นอกจากนี้ในการตรวจสอบลายเซ็นของโทเค็นการตรวจสอบว่า บริษัท ผู้ออกหลักทรัพย์ยืนยันของ ( iss
ฟิลด์) เป็น https://accounts.google.com
ว่าผู้ชม ( aud
ฟิลด์) เป็นรหัสลูกค้าที่ได้รับมอบหมายของคุณและที่โทเค็นยังไม่หมดอายุ ( exp
ฟิลด์).
การใช้ช่อง email
email_verified
และ hd
เพื่อตรวจสอบว่า Google โฮสต์และเชื่อถือได้สำหรับที่อยู่อีเมล ในกรณีที่ Google มีสิทธิ์ในขณะนี้ผู้ใช้ทราบว่าเป็นเจ้าของบัญชีที่ถูกต้องและคุณสามารถข้ามรหัสผ่านหรือวิธีการท้าทายอื่น ๆ ได้ มิฉะนั้นสามารถใช้วิธีการเหล่านี้เพื่อยืนยันบัญชีก่อนการเชื่อมโยง
กรณีที่ Google เชื่อถือได้:
-
email
มีคำต่อท้าย@gmail.com
นี่คือบัญชี Gmail -
email_verified
เป็นจริงและตั้งค่าhd
แล้วนี่คือบัญชี G Suite
ผู้ใช้สามารถลงทะเบียนบัญชี Google ได้โดยไม่ต้องใช้ Gmail หรือ G Suite เมื่อ email
ไม่มีคำต่อท้าย @gmail.com
และ hd
ไม่มี Google ไม่ได้รับอนุญาตและขอแนะนำให้ใช้รหัสผ่านหรือวิธีการท้าทายอื่น ๆ ในการยืนยันผู้ใช้ email_verfied
อาจเป็นจริงได้เช่นกันเนื่องจาก Google ได้ยืนยันผู้ใช้ในตอนแรกเมื่อสร้างบัญชี Google อย่างไรก็ตามความเป็นเจ้าของบัญชีอีเมลของบุคคลที่สามอาจมีการเปลี่ยนแปลง
ตรวจสอบข้อมูลผู้ใช้และสร้างบัญชีใหม่
ตรวจสอบว่าเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้เป็นจริงหรือไม่
- รหัสบัญชี Google ที่พบในช่อง
sub
การยืนยันอยู่ในฐานข้อมูลผู้ใช้ของคุณ - อีเมลในโปรแกรมยืนยันตรงกับผู้ใช้ในฐานข้อมูลผู้ใช้
หากเงื่อนไขข้อใดข้อหนึ่งเป็นจริง ให้แจ้งให้ผู้ใช้ลิงก์บัญชีที่มีอยู่กับบัญชี Google โดยตอบกลับคําขอที่มีข้อผิดพลาด HTTP 401 ซึ่งระบุ error=linking_error
และให้อีเมลของผู้ใช้เป็น login_hint
ตัวอย่างคําตอบมีดังนี้
HTTP/1.1 401 Unauthorized Content-Type: application/json;charset=UTF-8 { "error":"linking_error", "login_hint":"foo@bar.com" }
เมื่อ Google ได้รับการตอบกลับข้อผิดพลาด 401 กับ linking_error
Google จะส่งผู้ใช้ไปยังปลายทางการให้สิทธิ์ที่มี login_hint
เป็นพารามิเตอร์ ผู้ใช้ลิงก์บัญชีให้เสร็จสมบูรณ์โดยใช้ขั้นตอนการลิงก์ OAuth ในเบราว์เซอร์
หากเงื่อนไขไม่เป็นจริง ให้สร้างบัญชีผู้ใช้ใหม่ด้วยข้อมูลที่ให้ไว้ใน JWT โดยปกติบัญชีใหม่ๆ จะไม่มีการตั้งค่ารหัสผ่าน ขอแนะนําให้คุณเพิ่ม Google Sign-In ไปยังแพลตฟอร์มอื่นๆ เพื่อให้ผู้ใช้ลงชื่อเข้าสู่ระบบด้วย Google ในแพลตฟอร์มต่างๆ ของแอปพลิเคชันได้ หรือคุณจะส่งอีเมลลิงก์ไปยังผู้ใช้ที่เริ่มขั้นตอนการกู้คืนรหัสผ่านแก่ผู้ใช้ก็ได้ เพื่อให้ผู้ใช้ตั้งรหัสผ่านเพื่อลงชื่อเข้าใช้ในแพลตฟอร์มอื่นๆ ได้
เมื่อสร้างเสร็จแล้ว คุณต้องออกโทเค็นเพื่อการเข้าถึง แล้วแสดงผลค่าในออบเจ็กต์ JSON ในส่วนเนื้อหาของการตอบกลับ HTTPS ดังตัวอย่างต่อไปนี้
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
รับรหัสไคลเอ็นต์ Google API
คุณจะต้องระบุรหัสไคลเอ็นต์ Google API ในระหว่างขั้นตอนการลงทะเบียนการลิงก์บัญชี
วิธีรับรหัสไคลเอ็นต์ API โดยใช้โปรเจ็กต์ที่คุณสร้างขณะทําตามขั้นตอนการลิงก์ OAuth โดยทําตามขั้นตอนต่อไปนี้
- เปิดหน้าข้อมูลเข้าสู่ระบบของคอนโซล Google API
สร้างหรือเลือกโปรเจ็กต์ Google APIs
หากโปรเจ็กต์ไม่มีรหัสไคลเอ็นต์สําหรับประเภทเว็บแอปพลิเคชัน ให้คลิกสร้างข้อมูลรับรอง > รหัสไคลเอ็นต์ OAuth เพื่อสร้าง อย่าลืมใส่โดเมนของเว็บไซต์ในช่องต้นทาง JavaScript ที่ได้รับอนุญาต เมื่อทําการทดสอบหรือพัฒนาในเครื่อง คุณต้องเพิ่มทั้ง
http://localhost
และhttp://localhost:<port_number>
ลงในช่อง Origin JavaScript ที่ได้รับอนุญาต
การตรวจสอบการติดตั้งใช้งาน
คุณสามารถตรวจสอบการดำเนินงานของคุณโดยใช้ OAuth 2.0 สนามเด็กเล่น เครื่องมือ
ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้:
- คลิกการกำหนดค่า เพื่อเปิดหน้าต่าง OAuth 2.0 การกำหนดค่า
- ในด้านการไหล OAuth เลือกฝั่งไคลเอ็นต์
- ในฟิลด์ OAuth ปลายทางเลือกที่กำหนดเอง
- ระบุตำแหน่งข้อมูล OAuth 2.0 และรหัสไคลเอ็นต์ที่คุณกำหนดให้กับ Google ในช่องที่เกี่ยวข้อง
- ในขั้นตอนที่ 1 ส่วนที่ไม่ได้เลือกขอบเขตใด ๆ ของ Google ให้ปล่อยฟิลด์นี้ว่างไว้หรือพิมพ์ขอบเขตที่ถูกต้องสำหรับเซิร์ฟเวอร์ของคุณ (หรือสตริงที่กำหนดเองหากคุณไม่ได้ใช้ขอบเขต OAuth) เมื่อคุณทำเสร็จแล้วคลิกอนุญาต APIs
- ในขั้นตอนที่ 2 และขั้นตอนที่ 3 ส่วนไปไหลผ่าน OAuth 2.0 และตรวจสอบว่าแต่ละขั้นตอนการทำงานตามที่ตั้งใจไว้
คุณสามารถตรวจสอบการดำเนินงานของคุณโดยใช้ บัญชี Google เชื่อมโยงการสาธิต เครื่องมือ
ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้:
- คลิกเข้าสู่ระบบด้วยปุ่ม Google
- เลือกบัญชีที่คุณต้องการเชื่อมโยง
- ป้อนรหัสบริการ
- เลือกป้อนขอบเขตอย่างน้อยหนึ่งขอบเขตที่คุณจะร้องขอการเข้าถึง
- คลิกเริ่มการสาธิต
- เมื่อได้รับแจ้ง ให้ยืนยันว่าคุณอาจยินยอมและปฏิเสธคำขอเชื่อมโยง
- ยืนยันว่าคุณถูกเปลี่ยนเส้นทางไปยังแพลตฟอร์มของคุณ