ย้ายข้อมูลจาก GoogleAuthUtil และ Plus.API

หากคุณเคยผสานรวมกับ Google Sign-In มาก่อนโดยใช้ GoogleAuthUtil.getToken หรือ Plus.API คุณควรย้ายข้อมูลไปยังเวอร์ชันใหม่ล่าสุด Sign-In API เพื่อเพิ่มความปลอดภัยและประสบการณ์ของผู้ใช้ที่ดียิ่งขึ้น

ย้ายข้อมูลจากรูปแบบต่อต้านของโทเค็นเพื่อการเข้าถึง

คุณไม่ควรส่งโทเค็นเพื่อการเข้าถึงที่ได้รับกับ GoogleAuthUtil.getToken ไปยัง เซิร์ฟเวอร์ส่วนหลังของคุณเพื่อเป็นการยืนยันข้อมูลประจำตัว เนื่องจากคุณไม่สามารถยืนยันได้อย่างง่ายดาย มีการออกโทเค็นไปยังแบ็กเอนด์ของคุณ ซึ่งทำให้คุณมีช่องโหว่ในการแทรก โทเค็นเพื่อการเข้าถึงจากผู้โจมตี

ตัวอย่างเช่น หากโค้ด Android ของคุณมีลักษณะเหมือนตัวอย่างด้านล่าง คุณควร ย้ายข้อมูลแอปไปใช้แนวทางปฏิบัติแนะนำในปัจจุบัน

โค้ด 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:

โค้ด Android

ในตัวอย่างนี้ คำขอโทเค็นรหัสใช้ 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:

โค้ด Android

ในตัวอย่างนี้ คำขอรหัสการตรวจสอบสิทธิ์เซิร์ฟเวอร์จะใช้ 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);
...