GoogleAuthUtil ve Plus.API'den taşıma

Geçmişte Google ile Oturum Açma ile entegre ettiyseniz: GoogleAuthUtil.getToken veya Plus.API, en yeni Daha fazla güvenlik ve daha iyi bir kullanıcı deneyimi için Oturum Açma API'si.

Erişim jetonu karşıt kalıbından taşıma

GoogleAuthUtil.getToken ile alınan erişim jetonlarını şu adrese göndermemelisiniz: kolayca doğrulayamadığınızdan kimlik doğrulaması olarak arka uç sunucunuzu Bu da jetonun arka ucunuza verildiğini ve bu nedenle ekleme işlemlerine karşı savunmasız kalmanıza bir saldırıya uğradığını doğrulamalısınız.

Örneğin, Android kodunuz aşağıdaki örneğe benziyorsa Uygulamanızı mevcut en iyi uygulamalara taşıyın.

Android kodu

Bu örnekte, erişim jetonu isteklerioauth2: GoogleAuthUtil.getToken çağrısı için scope parametresi (oauth2:https://www.googleapis.com/auth/plus.login).

Kimlik doğrulaması için kullanılan bir erişim jetonuyla GoogleAuthUtil.getToken, kimlik jetonu akışını veya yetkilendirme kodu akışını kullanın.

Kimlik jetonu akışına geçin

Yalnızca kullanıcının kimliği, e-posta adresi, adı veya profil resmi URL'si gerekiyorsa kimlik jetonu akışını kullanın.

Kimlik jetonu akışına geçiş yapmak için aşağıdaki değişiklikleri yapın:

Android istemci tarafı

  • İstekte bulunursanız GET_ACCOUNTS (Kişiler) iznini kaldırın
  • GoogleAuthUtil, Plus.API ve diğer düğmeleri kullanarak AccountPicker.newChooseAccountIntent() veya AccountManager.newChooseAccountIntent() - Auth.GOOGLE_SIGN_IN_API arası GoogleSignInOptions.Builder.requestIdToken(...) yapılandırması.

Sunucu tarafı

Sunucu kimlik doğrulama kodu akışına git

Sunucunuzun, Google Drive, YouTube, veya Kişiler'de kayıtlı değilseniz sunucu kimlik doğrulama kodu akışını kullanın.

Sunucu yetkilendirme kodu akışına geçmek için aşağıdaki değişiklikleri yapın:

Android istemci tarafı

  • İstekte bulunursanız GET_ACCOUNTS (Kişiler) iznini kaldırın
  • GoogleAuthUtil, Plus.API ve diğer düğmeleri kullanarak AccountPicker.newChooseAccountIntent() veya AccountManager.newChooseAccountIntent() - Auth.GOOGLE_SIGN_IN_API GoogleSignInOptions.Builder.requestServerAuthCode(...) yapılandırması.

Sunucu tarafı

Bununla birlikte, eski ve yeni uç noktalarınız arasında API erişim mantığını paylaşmaya devam edebilirsiniz. Örneğin:

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 kimlik jeton akışından taşıma

Kimlik jetonları almak için GoogleAuthUtil kullanıyorsanız yeni Oturum Açma API'si Kimlik jetonu akışı.

Örneğin, Android kodunuz aşağıdaki örneğe benziyorsa migrate:

Android kodu

Örnekte, kimlik jetonu istekleri audience:server:client_id ve "scope" parametresi olarak web sunucunuzun istemci kimliğini GoogleAuthUtil.getToken araması (audience:server:client_id:9414861317621.apps.googleusercontent.com).

Yeni Oturum Açma API'si kimliği jeton akışı aşağıdaki avantajları sağlar:

  • Tek dokunuşla daha kolay oturum açma deneyimi
  • Sunucunuz ek bir ağ çağrısı olmadan kullanıcı profili bilgilerini alabilir

Kimlik jetonu akışına geçiş yapmak için aşağıdaki değişiklikleri yapın:

Android istemci tarafı

  • İstekte bulunursanız GET_ACCOUNTS (Kişiler) iznini kaldırın
  • GoogleAuthUtil, Plus.API ve diğer düğmeleri kullanarak AccountPicker.newChooseAccountIntent() veya AccountManager.newChooseAccountIntent() - Auth.GOOGLE_SIGN_IN_API arası GoogleSignInOptions.Builder.requestIdToken(...) yapılandırması.

Sunucu tarafı

Yeni Oturum Açma API'si, COPPA Connect ile uyumlu kimlik jetonları yayınlar. Bu spesifikasyon, kullanımdan kaldırılmış bir biçim kullanan GoogleAuthUtil.getToken'den farklıdır. Özellikle, veren kuruluş artık https ile https://accounts.google.com oldu. şema.

Taşıma işleminiz sırasında sunucunuzun, iki taraftan da kimlik jetonunu doğrulaması gerekir Android istemcileriniz hakkında bilgi edinin. Jetonun her iki biçimini de doğrulamak için kullandığınız istemci kitaplığına karşılık gelen bir değişiklik (varsa):

  • Java (Google API'leri İstemci Kitaplıkları): 1.21.0 veya daha yeni bir sürüme yükseltin
  • PHP (Google API'leri İstemci Kitaplıkları): v1 kullanıyorsanız 1.1.6 veya daha yeni bir sürüme geçin; v2 kullanıyorsanız 2.0.0-RC1 veya daha yeni bir sürüme yükseltin
  • Node.js: 0.9.7 veya daha yeni bir sürüme yükseltme
  • Python veya kendi uygulamalarınız: aşağıdaki veren kuruluşların her ikisini de kabul edin: https://accounts.google.com accounts.google.com

GoogleAuthUtil sunucusu yetkilendirme kodu akışından taşıma

Sunucu yetkilendirme kodu almak için GoogleAuthUtil kullanıyorsanız yeni Oturum Açma API'si yetkilendirme kodu akışı.

Örneğin, Android kodunuz aşağıdaki örneğe benziyorsa migrate:

Android kodu

Örnekte, sunucu yetkilendirme kodu istekleri oauth2:server:client_id + için scope parametresi olarak web sunucunuzun istemci kimliğini GoogleAuthUtil.getToken sesli arama (oauth2:server:client_id:9414861317621.apps.googleusercontent.com).

Yeni Oturum Açma API'si yetkilendirme kodu akışı aşağıdaki avantajları sağlar:

  • Tek dokunuşla daha kolay oturum açma deneyimi
  • Aşağıdaki taşıma rehberini uygularsanız sunucunuz bir kimlik jetonu alabilir kimlik doğrulama kodu değişimini gerçekleştirdiğinizde kullanıcının profil bilgilerini içerir

Yeni yetkilendirme kodu akışına geçmek için aşağıdaki değişiklikleri yapın:

Android istemci tarafı

  • İstekte bulunursanız GET_ACCOUNTS (Kişiler) iznini kaldırın
  • GoogleAuthUtil, Plus.API ve diğer düğmeleri kullanarak AccountPicker.newChooseAccountIntent() veya AccountManager.newChooseAccountIntent() - Auth.GOOGLE_SIGN_IN_API GoogleSignInOptions.Builder.requestServerAuthCode(...) yapılandırması.

Sunucu tarafı

Geçerli kodunuzu koruyun ancak https://oauth2.googleapis.com/token kodunu belirtin. oluşturulurken, jeton sunucusu uç noktası olarak GoogleAuthorizationCodeTokenRequest nesnesini tanımlayın, böylece kimlik jetonu alabilirsiniz başka bir tanesine gerek kalmadan kullanıcının e-posta adresi, kullanıcı kimliği ve profil bilgileriyle ağ çağrısı. Bu uç nokta tamamen geriye dönük uyumludur ve aşağıdaki kod hem eski hem de yeni Android cihazınızdan alınan sunucu kimlik doğrulama kodları için çalışır göz önünde bulundurun.

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);
...