การลิงก์ที่มีประสิทธิภาพยิ่งขึ้นด้วย OAuth และ Google Sign-In

ภาพรวม

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

หากต้องการลิงก์บัญชีกับ OAuth และ Google Sign-In ให้ทําตามขั้นตอนทั่วไปต่อไปนี้

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

รูปที่ 1 การลิงก์บัญชีในโทรศัพท์ของผู้ใช้ด้วยการลิงก์ที่มีประสิทธิภาพยิ่งขึ้น

ข้อกําหนดสําหรับการลิงก์ที่มีประสิทธิภาพ

ใช้งานเซิร์ฟเวอร์ OAuth

ปลายทาง token Exchange ต้องรองรับ Intent check, create และ get ด้านล่างนี้จะแสดงขั้นตอนที่ทําผ่านขั้นตอนการลิงก์บัญชี และระบุเวลาที่เรียกใช้ Intent ต่างๆ

  1. ผู้ใช้มีบัญชีในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
    1. ใช่ : ผู้ใช้ได้ใช้อีเมลที่เชื่อมโยงกับบัญชี Google เพื่อลงชื่อเข้าใช้แพลตฟอร์มของคุณหรือไม่ (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
      1. ใช่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (check intent จะถูกเรียกใช้เพื่อยืนยัน)
        1. ใช่ : ระบบจะเรียกใช้ get intent และบัญชีจะลิงก์บัญชีหากรับ Intent คืนสําเร็จ
        2. ไม่ : สร้างบัญชีใหม่ใช่ไหม (ผู้ใช้ตัดสินใจโดยเลือก "ใช่" หรือ "ไม่")
          1. ใช่ : ระบบจะเรียกใช้ create intent และลิงก์บัญชีเมื่อสร้าง Intent สําเร็จ
          2. ไม่ : จะมีการทริกเกอร์ขั้นตอน OAuth เว็บ ระบบจะนําผู้ใช้ไปยังเบราว์เซอร์ของผู้ใช้ และผู้ใช้มีตัวเลือกในการลิงก์กับอีเมลอื่น
      2. ไม่ จะมีการเรียกขั้นตอน OAuth สําหรับเว็บ ซึ่งระบบจะเปลี่ยนเส้นทางให้ผู้ใช้ไปที่เบราว์เซอร์ และผู้ใช้จะมีตัวเลือกให้ลิงก์กับอีเมลอื่นได้
    2. ไม่ : ผู้ใช้มีบัญชีที่ตรงกันในระบบการตรวจสอบสิทธิ์ของคุณหรือไม่ (check intent จะถูกเรียกใช้เพื่อยืนยัน)
      1. ใช่ : ระบบจะเรียกใช้ get intent และบัญชีจะลิงก์บัญชีหากรับ Intent คืนสําเร็จ
      2. ไม่ : ระบบจะเรียกใช้ create intent และระบบจะลิงก์บัญชีหากสร้าง Intent สําเร็จ

ตรวจหาบัญชีผู้ใช้ที่มีอยู่ (ตรวจสอบความตั้งใจ)

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

หากมีบัญชี Google ที่เกี่ยวข้องอยู่ในระบบการตรวจสอบสิทธิ์แล้ว ปลายทางการแลกเปลี่ยนโทเค็นจะตอบกลับด้วย account_found=true หากบัญชี Google ไม่ตรงกับผู้ใช้ที่มีอยู่ ปลายทางการแลกเปลี่ยนโทเค็นจะแสดงข้อผิดพลาด HTTP 404 Not Found ด้วย account_found=false

คําขอจะมีรูปแบบต่อไปนี้

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

ปลายทางของการแลกเปลี่ยนโทเค็นของคุณต้องสามารถจัดการพารามิเตอร์ต่อไปนี้

พารามิเตอร์ปลายทางของโทเค็น
intent สําหรับคําขอเหล่านี้ ค่าของพารามิเตอร์นี้คือ check
grant_type ประเภทของโทเค็นที่แลกเปลี่ยน สําหรับคําขอเหล่านี้ พารามิเตอร์นี้มีค่า urn:ietf:params:oauth:grant-type:jwt-bearer
assertion โทเค็นเว็บ JSON (JWT) ที่ยืนยันตัวตนผู้ใช้ของ Google พร้อมลงนาม JWT มีข้อมูลที่รวมรหัสบัญชี Google, ชื่อ และอีเมลของ Google
client_id รหัสไคลเอ็นต์ที่คุณกําหนดให้ Google
client_secret รหัสลับไคลเอ็นต์ที่คุณกําหนดให้ Google

ในการตอบสนองต่อคําขอ Intent ของ check ปลายทางของการแลกเปลี่ยนโทเค็นของคุณจะต้องทําตามขั้นตอนต่อไปนี้

  • ตรวจสอบและถอดรหัสการยืนยัน 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 การยืนยันอยู่ในฐานข้อมูลผู้ใช้ของคุณ
  • อีเมลในโปรแกรมยืนยันตรงกับผู้ใช้ในฐานข้อมูลผู้ใช้

หากเงื่อนไขข้อใดข้อหนึ่งเป็นจริง แสดงว่าผู้ใช้ลงชื่อสมัครใช้แล้ว ในกรณีดังกล่าว ให้ตอบกลับดังนี้

HTTP/1.1 200 Success
Content-Type: application/json;charset=UTF-8

{
  "account_found":"true",
}

หากรหัสบัญชี Google และอีเมลที่ระบุในการยืนยันไม่ตรงกับผู้ใช้ในฐานข้อมูลของคุณ ผู้ใช้ก็ยังไม่ได้ลงชื่อสมัครใช้ ในกรณีนี้ ปลายทางของการแลกเปลี่ยนโทเค็นของคุณต้องตอบกลับด้วยข้อผิดพลาด HTTP 404 ที่ระบุ "account_found": "false" ดังตัวอย่างต่อไปนี้

HTTP/1.1 404 Not found
Content-Type: application/json;charset=UTF-8

{
  "account_found":"false",
}

Handle automatic linking (get 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 returns a token for the user. If the Google Account doesn't match an existing user, your token exchange endpoint returns a linking_error error and optional login_hint.

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=get&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 get.
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.
scope Optional: Any scopes that you've configured Google to request from users.
client_id The client ID you assigned to Google.
client_secret The client secret you assigned to Google.

To respond to the get 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 an account is found for the user, issue an access token and return the values in a JSON object in the body of your HTTPS response, like in the following example:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",

  "refresh_token": "REFRESH_TOKEN",

  "expires_in": SECONDS_TO_EXPIRATION
}

In some cases, account linking based on ID token might fail for the user. If it does so for any reason, your token exchange endpoint needs to reply with a HTTP 401 error that specifies error=linking_error, as the following example shows:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

When Google receives a 401 error response with linking_error, Google sends the user to your authorization endpoint with login_hint as a parameter. The user completes account linking using the OAuth linking flow in their browser.

จัดการการสร้างบัญชีผ่าน 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",

  "refresh_token": "REFRESH_TOKEN",

  "expires_in": SECONDS_TO_EXPIRATION
}

รับรหัสไคลเอ็นต์ Google API

คุณจะต้องระบุรหัสไคลเอ็นต์ Google API ในระหว่างขั้นตอนการลงทะเบียนการลิงก์บัญชี

วิธีรับรหัสไคลเอ็นต์ API โดยใช้โปรเจ็กต์ที่คุณสร้างขณะทําตามขั้นตอนการลิงก์ OAuth โดยทําตามขั้นตอนต่อไปนี้

  1. เปิดหน้าข้อมูลเข้าสู่ระบบของคอนโซล Google API
  2. สร้างหรือเลือกโปรเจ็กต์ Google APIs

    หากโปรเจ็กต์ไม่มีรหัสไคลเอ็นต์สําหรับประเภทเว็บแอปพลิเคชัน ให้คลิกสร้างข้อมูลรับรอง &gt รหัสไคลเอ็นต์ OAuth เพื่อสร้าง อย่าลืมใส่โดเมนของเว็บไซต์ในช่องต้นทาง JavaScript ที่ได้รับอนุญาต เมื่อทําการทดสอบหรือพัฒนาในเครื่อง คุณต้องเพิ่มทั้ง http://localhost และ http://localhost:<port_number> ลงในช่อง Origin JavaScript ที่ได้รับอนุญาต

การตรวจสอบการติดตั้งใช้งาน

คุณสามารถตรวจสอบการดำเนินงานของคุณโดยใช้ OAuth 2.0 สนามเด็กเล่น เครื่องมือ

ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้:

  1. คลิกการกำหนดค่า เพื่อเปิดหน้าต่าง OAuth 2.0 การกำหนดค่า
  2. ในด้านการไหล OAuth เลือกฝั่งไคลเอ็นต์
  3. ในฟิลด์ OAuth ปลายทางเลือกที่กำหนดเอง
  4. ระบุตำแหน่งข้อมูล OAuth 2.0 และรหัสไคลเอ็นต์ที่คุณกำหนดให้กับ Google ในช่องที่เกี่ยวข้อง
  5. ในขั้นตอนที่ 1 ส่วนที่ไม่ได้เลือกขอบเขตใด ๆ ของ Google ให้ปล่อยฟิลด์นี้ว่างไว้หรือพิมพ์ขอบเขตที่ถูกต้องสำหรับเซิร์ฟเวอร์ของคุณ (หรือสตริงที่กำหนดเองหากคุณไม่ได้ใช้ขอบเขต OAuth) เมื่อคุณทำเสร็จแล้วคลิกอนุญาต APIs
  6. ในขั้นตอนที่ 2 และขั้นตอนที่ 3 ส่วนไปไหลผ่าน OAuth 2.0 และตรวจสอบว่าแต่ละขั้นตอนการทำงานตามที่ตั้งใจไว้

คุณสามารถตรวจสอบการดำเนินงานของคุณโดยใช้ บัญชี Google เชื่อมโยงการสาธิต เครื่องมือ

ในเครื่องมือ ให้ทำตามขั้นตอนต่อไปนี้:

  1. คลิกเข้าสู่ระบบด้วยปุ่ม Google
  2. เลือกบัญชีที่คุณต้องการเชื่อมโยง
  3. ป้อนรหัสบริการ
  4. เลือกป้อนขอบเขตอย่างน้อยหนึ่งขอบเขตที่คุณจะร้องขอการเข้าถึง
  5. คลิกเริ่มการสาธิต
  6. เมื่อได้รับแจ้ง ให้ยืนยันว่าคุณอาจยินยอมและปฏิเสธคำขอเชื่อมโยง
  7. ยืนยันว่าคุณถูกเปลี่ยนเส้นทางไปยังแพลตฟอร์มของคุณ