GoogleAuthUtil ve Plus.API'den taşıma

Daha önce GoogleAuthUtil.getToken veya Plus.API kullanarak Google ile Oturum Açma entegrasyonu gerçekleştirdiyseniz daha fazla güvenlik ve daha iyi bir kullanıcı deneyimi için en yeni Sign-In API'ye geçmeniz gerekir.

Erişim jetonu anti kalıbından geçiş

GoogleAuthUtil.getToken ile alınan erişim jetonlarını, kimlik doğrulaması olarak arka uç sunucunuza göndermemelisiniz. Jetonun arka ucunuza verildiğini kolayca doğrulayamazsınız ve bu durum sizi bir saldırgandan erişim jetonu ekleme tehlikesine karşı savunmasız hale getirir.

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

Android kodu

Örnekte, erişim jetonu istekleri GoogleAuthUtil.getToken çağrısı (oauth2:https://www.googleapis.com/auth/plus.login) için scope parametresi olarak oauth2: ve bir kapsam dizesi kullanır.

GoogleAuthUtil.getToken ile edinilen erişim jetonuyla kimlik doğrulamak yerine kimlik jetonu akışını veya yetkilendirme kodu akışını kullanın.

Kimlik jetonu akışına geçin

Kullanıcının kimliği, e-posta adresi, adı veya profil resmi URL'sine ihtiyacınız varsa kimlik jetonu akışını kullanın.

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

Android istemci tarafı

  • Dilerseniz GET_ACCOUNTS (Kişiler) iznini kaldırın
  • GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() veya AccountManager.newChooseAccountIntent() kullanan kodları, GoogleSignInOptions.Builder.requestIdToken(...) yapılandırmasıyla Auth.GOOGLE_SIGN_IN_API olarak değiştirin.

Sunucu tarafı

Sunucu yetkilendirme kodu akışına taşı

Sunucunuzun Google Drive, YouTube veya Kişiler gibi diğer Google API'lerine erişmesi gerekiyorsa 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ı

  • Dilerseniz GET_ACCOUNTS (Kişiler) iznini kaldırın
  • GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() veya AccountManager.newChooseAccountIntent() kullanan kodları, GoogleSignInOptions.Builder.requestServerAuthCode(...) yapılandırmasıyla Auth.GOOGLE_SIGN_IN_API olarak değiştirin.

Sunucu tarafı

API erişim mantığını eski ve yeni uç noktalarınız arasında 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 kimliği jeton akışından geçiş yapma

Kimlik jetonlarını almak için GoogleAuthUtil kullanıyorsanız yeni Sign-In API kimlik jetonu akışına geçmeniz gerekir.

Örneğin, Android kodunuz aşağıdaki örneğe benziyorsa taşıma işlemini gerçekleştirmeniz gerekir:

Android kodu

Örnekte, kimlik jetonu istekleri GoogleAuthUtil.getToken çağrısı (audience:server:client_id:9414861317621.apps.googleusercontent.com) için "scope" parametresi olarak audience:server:client_id ve web sunucunuzun istemci kimliğini kullanır.

Yeni Sign-In API Kimliği jeton akışı aşağıdaki avantajlara sahiptir:

  • Sadeleştirilmiş tek dokunuşla oturum açma deneyimi
  • Sunucunuz ek bir ağ çağrısı olmadan kullanıcı profili bilgilerini alabilir

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

Android istemci tarafı

  • Dilerseniz GET_ACCOUNTS (Kişiler) iznini kaldırın
  • GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() veya AccountManager.newChooseAccountIntent() kullanan kodları, GoogleSignInOptions.Builder.requestIdToken(...) yapılandırmasıyla Auth.GOOGLE_SIGN_IN_API olarak değiştirin.

Sunucu tarafı

Yeni Oturum Açma API'si, kullanımdan kaldırılan bir biçim kullanan GoogleAuthUtil.getToken'den farklı olarak OpenID Connect spesifikasyonuna uyan kimlik jetonları yayınlar. Özellikle, veren kuruluş artık https şemasıyla https://accounts.google.com şeklindedir.

Taşıma işleminiz sırasında sunucunuzun hem eski hem de yeni Android istemcilerinizden kimlik jetonunu doğrulaması gerekir. Jetonun her iki biçimini de doğrulamak için kullandığınız istemci kitaplığına karşılık gelen değişikliği yapın (bir tane kullanıyorsanız):

  • Java (Google API'leri İstemci Kitaplıkları): 1.21.0 veya daha yeni bir sürüme geçme
  • PHP (Google API'leri İstemci Kitaplıkları): v1 kullanıyorsanız 1.1.6 veya daha yeni bir sürüme; 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 geçme
  • Python veya kendi uygulamalarınız: Şu veren kuruluşların ikisini de kabul edin: https://accounts.google.com ve accounts.google.com

GoogleAuthUtil sunucusu kimlik doğrulama kodu akışından geçiş yapma

Sunucu yetkilendirme kodu almak için GoogleAuthUtil kullanıyorsanız yeni Oturum Açma API'sı yetkilendirme kodu akışına geçmeniz gerekir.

Örneğin, Android kodunuz aşağıdaki örneğe benziyorsa taşıma işlemini gerçekleştirmeniz gerekir:

Android kodu

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

Yeni Sign-In API kimlik doğrulama kodu akışı aşağıdaki avantajlara sahiptir:

  • Sadeleştirilmiş tek dokunuşla oturum açma deneyimi
  • Aşağıdaki taşıma rehberini izlerseniz yetkilendirme kodu değişimi yaptığınızda sunucunuz, kullanıcının profil bilgilerini içeren bir kimlik jetonu alabilir

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

Android istemci tarafı

  • Dilerseniz GET_ACCOUNTS (Kişiler) iznini kaldırın
  • GoogleAuthUtil, Plus.API, AccountPicker.newChooseAccountIntent() veya AccountManager.newChooseAccountIntent() kullanan kodları, GoogleSignInOptions.Builder.requestServerAuthCode(...) yapılandırmasıyla Auth.GOOGLE_SIGN_IN_API olarak değiştirin.

Sunucu tarafı

Mevcut kodunuzu koruyun, ancak GoogleAuthorizationCodeTokenRequest nesnesini oluştururken jeton sunucusu uç noktası olarak https://oauth2.googleapis.com/token belirtin. Böylece başka bir ağ çağrısına gerek kalmadan kullanıcının e-posta adresi, kullanıcı kimliği ve profil bilgilerini içeren bir kimlik jetonu alabilirsiniz. Bu uç nokta geriye dönük olarak tamamen uyumludur. Aşağıdaki kod, hem eski hem de yeni Android istemci uygulamalarınızdan alınan sunucu yetkilendirme kodları için çalışır.

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