Geçmişte GoogleAuthUtil.getToken
veya Plus.API
'ü kullanarak Google ile oturum açma özelliğini entegre ettiyseniz daha fazla güvenlik ve daha iyi bir kullanıcı deneyimi için en yeni oturum açma API'sine geçmeniz gerekir.
Erişim jetonu anti-pattern'inden taşıma
GoogleAuthUtil.getToken
ile elde edilen erişim jetonlarını, kimlik beyanı olarak arka uç sunucunuza göndermemelisiniz. Çünkü jetonun arka ucunuza verildiğini kolayca doğrulayamazsınız. Bu da saldırgan tarafından erişim jetonu eklenmesine karşı savunmasız olmanıza neden olur.
Örneğin, Android kodunuz aşağıdaki örneğe benziyorsa uygulamanızı mevcut en iyi uygulamalara taşımanız gerekir.
Örnekte, erişim jetonu isteklerinde oauth2:
ve GoogleAuthUtil.getToken
çağrısı (oauth2:https://www.googleapis.com/auth/plus.login
) için scope
parametresi olarak bir kapsam dizesi kullanılır.
GoogleAuthUtil.getToken
ile edinilen erişim jetonuyla kimlik doğrulaması yapmak yerine kimlik jetonu akışını veya yetkilendirme kodu akışını kullanın.
Kimlik jetonu akışına geçiş
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ç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
,AccountPicker.newChooseAccountIntent()
veyaAccountManager.newChooseAccountIntent()
kullanan tüm kodlarıGoogleSignInOptions.Builder.requestIdToken(...)
yapılandırmasıylaAuth.GOOGLE_SIGN_IN_API
olarak değiştirin.
Sunucu tarafı
- Kimlik jetonu kimlik doğrulaması için yeni bir uç nokta oluşturun
- İstemci uygulamalarınız taşındıktan sonra eski uç noktayı devre dışı bırakma
Sunucu kimlik doğrulama kodu akışına geçiş
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 kimlik doğrulama kodu akışına geçmek için aşağıdaki değişiklikleri yapın:
Android istemci tarafı
- İsterseniz
GET_ACCOUNTS
(Kişiler) iznini kaldırabilirsiniz GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
veyaAccountManager.newChooseAccountIntent()
kullanan tüm kodlarıGoogleSignInOptions.Builder.requestServerAuthCode(...)
yapılandırmasıylaAuth.GOOGLE_SIGN_IN_API
olarak değiştirin.
Sunucu tarafı
- Sunucu yetkilendirme kodu akışı için yeni bir uç nokta oluşturun
- İstemci uygulamalarınız taşındıktan sonra eski uç noktayı devre dışı bırakın
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 kimlik jetonu akışından geçiş yapma
Kimlik jetonları 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 örnek gibiyse taşıma işlemini yapmanız gerekir:
Örnekte, kimlik jetonu isteklerinde audience:server:client_id
ve web sunucunuzun istemci kimliği, GoogleAuthUtil.getToken
çağrısının (audience:server:client_id:9414861317621.apps.googleusercontent.com
) "scope" parametresi olarak kullanılır.
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ı yapmadan 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
,AccountPicker.newChooseAccountIntent()
veyaAccountManager.newChooseAccountIntent()
kullanan tüm kodlarıGoogleSignInOptions.Builder.requestIdToken(...)
yapılandırmasıylaAuth.GOOGLE_SIGN_IN_API
olarak değiştirin.
Sunucu tarafı
Kullanımdan kaldırılmış bir biçim kullanan GoogleAuthUtil.getToken
'nin aksine, yeni Oturum Açma API'si, COPPA Connect spesifikasyonuna uygun kimlik jetonları yayınlar.
Özellikle, https://accounts.google.com
kimlikli ve https
şemasına sahip bir banka var.
Taşıma işleminiz sırasında sunucunuzun hem eski hem de yeni Android istemcilerinizden gelen kimlik jetonunu doğrulaması gerekir. Jetonun her iki biçimini de doğrulamak için kullandığınız istemci kitaplığına (kullanıyorsanız) karşılık gelen değişikliği yapın:
- Java (Google API'leri İstemci Kitaplıkları): 1.21.0 veya sonraki bir sürüme yükseltin
- PHP (Google API'leri İstemci Kitaplıkları): 1. sürümü kullanıyorsanız 1.1.6 veya daha yeni bir sürüme, 2. sürümü kullanıyorsanız 2.0.0-RC1 veya daha yeni bir sürüme geçin
- Node.js: 0.9.7 veya daha yeni bir sürüme yükseltme
- Python veya kendi uygulamalarınız: Şu veren verenlerin ikisini de kabul edin:
https://accounts.google.com
veaccounts.google.com
GoogleAuthUtil sunucu kimlik doğrulama kodu akışından geçiş yapma
Sunucu kimlik doğrulama kodu almak için GoogleAuthUtil
kullanıyorsanız yeni Oturum Açma API'si kimlik doğrulama kodu akışına geçmeniz gerekir.
Örneğin, Android kodunuz aşağıdaki örneğe benziyorsa taşıma işlemi yapmanız gerekir:
Örnekte, sunucu kimlik doğrulama kodu istekleri GoogleAuthUtil.getToken
çağrısı (oauth2:server:client_id:9414861317621.apps.googleusercontent.com
) için scope
parametresi olarak oauth2:server:client_id
ve web sunucunuzun istemci kimliğini kullanmaktadır.
Yeni Sign-In API kimlik doğrulama kodu akışı aşağıdaki avantajlara sahiptir:
- Basitleştirilmiş tek dokunuşla oturum açma deneyimi
- Aşağıdaki taşıma kılavuzunu uygularsanız sunucunuz, kimlik doğrulama kodu değişimi yaptığınızda kullanıcının profil bilgilerini içeren bir kimlik jetonu alabilir.
Yeni kimlik doğrulama kodu akışına geçmek için aşağıdaki değişiklikleri yapın:
Android istemci tarafı
- İsterseniz
GET_ACCOUNTS
(Kişiler) iznini kaldırabilirsiniz GoogleAuthUtil
,Plus.API
,AccountPicker.newChooseAccountIntent()
veyaAccountManager.newChooseAccountIntent()
kullanan tüm kodlarıGoogleSignInOptions.Builder.requestServerAuthCode(...)
yapılandırmasıylaAuth.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
değerini belirtin. Böylece başka bir ağ çağrısına gerek kalmadan kullanıcının e-postası, kullanıcı kimliği ve profil bilgileriyle bir kimlik jetonu alabilirsiniz. Bu uç nokta tamamen geriye dönük uyumludur ve aşağıdaki kod, hem eski hem de yeni Android istemci uygulamalarınızdan alınan sunucu kimlik doğrulama 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); ...