หากคุณผสานรวมกับ Google Sign-In ก่อนหน้านี้โดยใช้ GoogleAuthUtil.getToken
หรือ Plus.API
คุณควรเปลี่ยนไปใช้ Sign-In API เวอร์ชันล่าสุดเพื่อความปลอดภัยที่มากขึ้นและประสบการณ์การใช้งานที่ดีขึ้น
ย้ายข้อมูลจากรูปแบบที่ไม่แนะนำสำหรับโทเค็นการเข้าถึง
คุณไม่ควรส่งโทเค็นการเข้าถึงที่ได้รับจาก GoogleAuthUtil.getToken
ไปยังเซิร์ฟเวอร์แบ็กเอนด์ของคุณเพื่อยืนยันตัวตน เนื่องจากคุณไม่สามารถยืนยันได้อย่างง่ายดายว่ามีการออกโทเค็นให้กับแบ็กเอนด์ของคุณ ซึ่งทำให้คุณเสี่ยงต่อการแทรกโทเค็นการเข้าถึงจากผู้โจมตี
เช่น หากโค้ด Android มีลักษณะเหมือนกับตัวอย่างด้านล่าง คุณควรย้ายข้อมูลแอปไปยังแนวทางปฏิบัติแนะนำในปัจจุบัน
ในตัวอย่างนี้ คําขอโทเค็นการเข้าถึงใช้ oauth2:
พร้อมสตริงขอบเขตเป็นพารามิเตอร์ scope
สําหรับการเรียกใช้ GoogleAuthUtil.getToken
(oauth2:https://www.googleapis.com/auth/plus.login
)
ใช้ขั้นตอนโทเค็นระบุตัวตนหรือขั้นตอนรหัสการให้สิทธิ์แทนการตรวจสอบสิทธิ์ด้วยโทเค็นการเข้าถึงที่ได้รับจาก GoogleAuthUtil.getToken
ย้ายข้อมูลไปยังขั้นตอนโทเค็นรหัส
หากต้องการเพียงบัตรประจำตัว อีเมล ชื่อ หรือ URL รูปโปรไฟล์ของผู้ใช้ ให้ใช้ขั้นตอนการใช้โทเค็นบัตรประจำตัว
หากต้องการย้ายข้อมูลไปยังขั้นตอนโทเค็นรหัส ให้ทำการเปลี่ยนแปลงต่อไปนี้
ฝั่งไคลเอ็นต์ Android
- นำสิทธิ์
GET_ACCOUNTS
(รายชื่อติดต่อ) ออกหากคุณขอ - เปลี่ยนโค้ดที่ใช้
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
หรือAccountManager.newChooseAccountIntent()
เป็นAuth.GOOGLE_SIGN_IN_API
ด้วยการกำหนดค่าGoogleSignInOptions.Builder.requestIdToken(...)
ฝั่งเซิร์ฟเวอร์
- สร้างปลายทางใหม่สําหรับการตรวจสอบสิทธิ์ด้วยโทเค็นระบุตัวตน
- ปิดปลายทางเก่าหลังจากย้ายข้อมูลแอปไคลเอ็นต์แล้ว
ย้ายข้อมูลไปยังขั้นตอนการให้สิทธิ์ที่ต้องใช้รหัสการตรวจสอบสิทธิ์ของเซิร์ฟเวอร์
หากเซิร์ฟเวอร์ของคุณจำเป็นต้องเข้าถึง Google API อื่นๆ เช่น Google ไดรฟ์, YouTube หรือ Contacts ให้ใช้ขั้นตอนการขอรหัสการตรวจสอบสิทธิ์เซิร์ฟเวอร์
หากต้องการย้ายข้อมูลไปยังกระบวนการของรหัสการตรวจสอบสิทธิ์เซิร์ฟเวอร์ ให้ทําการเปลี่ยนแปลงต่อไปนี้
ฝั่งไคลเอ็นต์ Android
- นำสิทธิ์
GET_ACCOUNTS
(รายชื่อติดต่อ) ออกหากคุณขอ - เปลี่ยนโค้ดที่ใช้
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
หรือAccountManager.newChooseAccountIntent()
เป็นAuth.GOOGLE_SIGN_IN_API
ด้วยการกำหนดค่าGoogleSignInOptions.Builder.requestServerAuthCode(...)
ฝั่งเซิร์ฟเวอร์
- สร้างปลายทางใหม่สำหรับขั้นตอนการใช้รหัสการให้สิทธิ์เซิร์ฟเวอร์
- ปิดปลายทางเดิมหลังจากย้ายข้อมูลแอปไคลเอ็นต์แล้ว
คุณยังคงแชร์ตรรกะการเข้าถึง API ระหว่างปลายทางแบบเก่าและใหม่ได้ เช่น
GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest(...); String accessToken = tokenResponse.getAccessToken(); String refreshToken = tokenResponse.getRefreshToken(); Long expiresInSeconds = tokenResponse.getExpiresInSeconds(); // Shared by your old and new implementation, old endpoint can pass null for refreshToken private void driveAccess(String refreshToken, String accessToken, Long expiresInSeconds) { GoogleCredential credential = new GoogleCredential.Builder() .setTransPort(...) ... .build(); credential.setAccessToken(accessToken); credential.setExpiresInSeconds(expiresInSeconds); credential.setRefreshToken(refreshToken); }
ย้ายข้อมูลจากขั้นตอนโทเค็นระบุตัวตน GoogleAuthUtil
หากใช้ GoogleAuthUtil
เพื่อรับโทเค็นระบุตัวตน คุณควรเปลี่ยนไปใช้ขั้นตอนโทเค็นระบุตัวตนของ Sign-In API ใหม่
เช่น หากโค้ด Android มีลักษณะดังตัวอย่างต่อไปนี้ คุณควรย้ายข้อมูล
ในตัวอย่างนี้ คําขอโทเค็นระบุตัวตนใช้ audience:server:client_id
บวกรหัสไคลเอ็นต์สําหรับเว็บเซิร์ฟเวอร์ของคุณเป็นพารามิเตอร์ "ขอบเขต" สําหรับการเรียก GoogleAuthUtil.getToken
(audience:server:client_id:9414861317621.apps.googleusercontent.com
)
ขั้นตอนโทเค็นระบุตัวตนของ Sign-In API ใหม่มีประโยชน์ดังนี้
- ประสบการณ์การลงชื่อเข้าใช้ด้วย One Tap ที่มีประสิทธิภาพยิ่งขึ้น
- เซิร์ฟเวอร์ของคุณจะรับข้อมูลโปรไฟล์ผู้ใช้ได้โดยไม่ต้องมีการเรียกใช้เครือข่ายเพิ่มเติม
หากต้องการเปลี่ยนไปใช้ขั้นตอนโทเค็นระบุตัวตน ให้ทําการเปลี่ยนแปลงต่อไปนี้
ฝั่งไคลเอ็นต์ Android
- นำสิทธิ์
GET_ACCOUNTS
(รายชื่อติดต่อ) ออกหากคุณขอ - เปลี่ยนโค้ดที่ใช้
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
หรือAccountManager.newChooseAccountIntent()
เป็นAuth.GOOGLE_SIGN_IN_API
ด้วยการกำหนดค่าGoogleSignInOptions.Builder.requestIdToken(...)
ฝั่งเซิร์ฟเวอร์
Sign-In API ใหม่จะออกโทเค็นระบุตัวตนที่เป็นไปตามข้อกําหนดของ OpenID Connect ซึ่งแตกต่างจาก GoogleAuthUtil.getToken
ที่ใช้รูปแบบที่เลิกใช้งานแล้ว
กล่าวอย่างเจาะจงคือ ตอนนี้ผู้ออกใบรับรองคือ https://accounts.google.com
โดยมีสคีมา https
ในระหว่างกระบวนการย้ายข้อมูล เซิร์ฟเวอร์ของคุณจะต้องยืนยันโทเค็นระบุตัวตนจากทั้งไคลเอ็นต์ Android เก่าและใหม่ ในการยืนยันโทเค็นทั้ง 2 รูปแบบ ให้ทำการเปลี่ยนแปลงที่สอดคล้องกับไลบรารีของไคลเอ็นต์ที่ใช้ (หากคุณใช้)
- Java (ไลบรารีของไคลเอ็นต์ Google APIs): อัปเกรดเป็น 1.21.0 ขึ้นไป
- PHP (ไลบรารีไคลเอ็นต์ Google APIs): หากคุณใช้ v1 ให้อัปเกรดเป็น 1.1.6 หรือใหม่กว่า ถ้าคุณใช้ v2 ให้อัปเกรดเป็น 2.0.0-RC1 หรือรุ่นที่ใหม่กว่า
- Node.js: อัปเกรดเป็น 0.9.7 ขึ้นไป
- Python หรือการติดตั้งใช้งานของคุณเอง: ยอมรับทั้ง 2 ผู้ออกบัตรต่อไปนี้
https://accounts.google.com
และaccounts.google.com
ย้ายข้อมูลจากขั้นตอนการใช้รหัสการตรวจสอบสิทธิ์เซิร์ฟเวอร์ GoogleAuthUtil
หากคุณใช้ GoogleAuthUtil
เพื่อรับรหัสการให้สิทธิ์เซิร์ฟเวอร์ คุณควรเปลี่ยนไปใช้ขั้นตอนการใช้รหัสการให้สิทธิ์ของ Sign-In API เวอร์ชันใหม่
เช่น หากโค้ด Android มีลักษณะดังตัวอย่างต่อไปนี้ คุณควรย้ายข้อมูล
ในตัวอย่างนี้ คําขอรหัสการตรวจสอบสิทธิ์เซิร์ฟเวอร์ใช้ oauth2:server:client_id
+ รหัสไคลเอ็นต์สําหรับเว็บเซิร์ฟเวอร์ของคุณเป็นพารามิเตอร์ scope
สําหรับการเรียก GoogleAuthUtil.getToken
(oauth2:server:client_id:9414861317621.apps.googleusercontent.com
)
ขั้นตอนการใช้รหัสการให้สิทธิ์ของ Sign-In API ใหม่มีประโยชน์ดังนี้
- ประสบการณ์การลงชื่อเข้าใช้ด้วย One Tap ที่มีประสิทธิภาพยิ่งขึ้น
- หากคุณทําตามคู่มือการย้ายข้อมูลด้านล่าง เซิร์ฟเวอร์จะได้รับโทเค็นระบุตัวตนซึ่งมีข้อมูลโปรไฟล์ของผู้ใช้เมื่อคุณแลกเปลี่ยนรหัสการตรวจสอบสิทธิ์
หากต้องการเปลี่ยนไปใช้ขั้นตอนการขอรหัสผ่านใหม่ ให้ทำการเปลี่ยนแปลงต่อไปนี้
ฝั่งไคลเอ็นต์ Android
- นำสิทธิ์
GET_ACCOUNTS
(รายชื่อติดต่อ) ออกหากคุณขอ - เปลี่ยนโค้ดที่ใช้
GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
หรือAccountManager.newChooseAccountIntent()
เป็นAuth.GOOGLE_SIGN_IN_API
ด้วยการกำหนดค่าGoogleSignInOptions.Builder.requestServerAuthCode(...)
ฝั่งเซิร์ฟเวอร์
เก็บโค้ดปัจจุบันไว้ แต่ระบุ https://oauth2.googleapis.com/token
เป็นปลายทางของเซิร์ฟเวอร์โทเค็นเมื่อสร้างออบเจ็กต์ GoogleAuthorizationCodeTokenRequest
เพื่อให้คุณได้รับโทเค็นระบุตัวตนที่มีอีเมล รหัสผู้ใช้ และข้อมูลโปรไฟล์ของผู้ใช้โดยไม่ต้องมีการเรียกใช้เครือข่ายอีก ปลายทางนี้เข้ากันได้แบบย้อนหลังโดยสมบูรณ์ และโค้ดด้านล่างจะใช้ได้กับรหัสการตรวจสอบสิทธิ์เซิร์ฟเวอร์ที่ดึงมาจากการใช้งานไคลเอ็นต์ Android ทั้งเก่าและใหม่
GoogleTokenResponse tokenResponse = new GoogleAuthorizationCodeTokenRequest( transport, jsonFactory, // Use below for tokenServerEncodedUrl parameter "https://oauth2.googleapis.com/token", clientSecrets.getDetails().getClientId(), clientSecrets.getDetails().getClientSecret(), authCode, REDIRECT_URI) .execute(); ... // You can also get an ID token from auth code exchange. GoogleIdToken googleIdToken = tokenResponse.parseIdToken(); GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory) .setAudience(Arrays.asList(SERVER_CLIENT_ID)) .setIssuer("https://accounts.google.com") .build(); // Refer to ID token documentation to see how to get data from idToken object. GoogleIdToken idToken = verifier.verify(idTokenString); ...