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.
Ö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()
veyaAccountManager.newChooseAccountIntent()
kullanan 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ırakın
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()
veyaAccountManager.newChooseAccountIntent()
kullanan 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 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:
Ö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()
veyaAccountManager.newChooseAccountIntent()
kullanan kodları,GoogleSignInOptions.Builder.requestIdToken(...)
yapılandırmasıylaAuth.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
veaccounts.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:
Ö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()
veyaAccountManager.newChooseAccountIntent()
kullanan 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
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); ...