หากคุณเคยผสานรวมกับ 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 หรือรายชื่อติดต่อ ให้ใช้ขั้นตอนการใช้รหัสการให้สิทธิ์เซิร์ฟเวอร์
หากต้องการย้ายข้อมูลไปยังกระบวนการของรหัสการตรวจสอบสิทธิ์เซิร์ฟเวอร์ ให้ทําการเปลี่ยนแปลงต่อไปนี้
ฝั่งไคลเอ็นต์ของ 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
เพื่อรับโทเค็นรหัส คุณควรย้ายข้อมูลไปยัง
ขั้นตอนโทเค็นรหัส API การลงชื่อเข้าใช้
ตัวอย่างเช่น หากโค้ด Android ของคุณมีลักษณะดังตัวอย่างต่อไปนี้ migrate:
ในตัวอย่างนี้ คำขอโทเค็นรหัสใช้ audience:server:client_id
บวก
รหัสไคลเอ็นต์สำหรับเว็บเซิร์ฟเวอร์ของคุณเป็นพารามิเตอร์ "ขอบเขต" สำหรับ
การโทร GoogleAuthUtil.getToken
ครั้ง
(audience:server:client_id:9414861317621.apps.googleusercontent.com
)
ขั้นตอนใหม่ของโทเค็นรหัส API การลงชื่อเข้าใช้มีประโยชน์ดังต่อไปนี้
- ประสบการณ์การลงชื่อเข้าใช้ด้วยการแตะเพียงครั้งเดียวที่มีประสิทธิภาพยิ่งขึ้น
- เซิร์ฟเวอร์จะได้รับข้อมูลโปรไฟล์ผู้ใช้ได้โดยไม่ต้องเรียกใช้เครือข่ายเพิ่มเติม
หากต้องการย้ายข้อมูลไปยังขั้นตอนโทเค็นรหัส ให้ทำการเปลี่ยนแปลงต่อไปนี้
ฝั่งไคลเอ็นต์ของ 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
สคีมา
ระหว่างขั้นตอนการย้ายข้อมูล เซิร์ฟเวอร์จะต้องยืนยันโทเค็นรหัสจากทั้ง 2 ที่ ลูกค้า 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 ของคุณมีลักษณะดังตัวอย่างต่อไปนี้ migrate:
ในตัวอย่างนี้ คำขอรหัสการตรวจสอบสิทธิ์เซิร์ฟเวอร์จะใช้ oauth2:server:client_id
+
รหัสไคลเอ็นต์สำหรับเว็บเซิร์ฟเวอร์ของคุณเป็นพารามิเตอร์ scope
สำหรับ
การโทร GoogleAuthUtil.getToken
ครั้ง (oauth2:server:client_id:9414861317621.apps.googleusercontent.com
)
ขั้นตอนใหม่สำหรับรหัสการตรวจสอบสิทธิ์ของ Sign-In API มีประโยชน์ดังต่อไปนี้
- ประสบการณ์การลงชื่อเข้าใช้ด้วยการแตะเพียงครั้งเดียวที่มีประสิทธิภาพยิ่งขึ้น
- หากทำตามคำแนะนำในการย้ายข้อมูลด้านล่าง เซิร์ฟเวอร์ของคุณจะได้รับโทเค็นรหัส ที่มีข้อมูลโปรไฟล์ของผู้ใช้เมื่อคุณแลกเปลี่ยนรหัสการตรวจสอบสิทธิ์
หากต้องการย้ายข้อมูลไปยังขั้นตอนการใช้รหัสการให้สิทธิ์ใหม่ ให้ทำการเปลี่ยนแปลงต่อไปนี้
ฝั่งไคลเอ็นต์ของ 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); ...