Bu kılavuzda, bir Google Hesabı hakkında ek güven sinyalleri döndüren bir özellikler koleksiyonu açıklanmaktadır. Bu güven sinyalleri, hesap yönetimi sisteminizin kayıt sırasında, hesap oluşturma sürecinde ve daha sonra geri dönen kullanıcılar için risk temelli kararlar almasına yardımcı olur.
Kurulum
Ek talepler alabilmek için uygulamanızın yayınlanması, doğrulanması ve güvenlik paketi özelliklerinin etkinleştirilmesi gerekir.
Uygulamanızın yayınlandığını ve doğrulandığını onaylamak için:
- Google Auth Platform'u açın.
- Uygulamanız için projeyi seçin veya oluşturun
- Menüde Kitle'yi tıklayın.
- Yayınlanma durumunun Üretimde olduğunu onaylayın.
- Menüde Doğrulama Merkezi'ni tıklayın.
Doğrulama Durumu'nun Doğrulandı olduğunu onaylayın.
Daha fazla bilgi edinmek için OAuth Uygulaması Doğrulama Yardım Merkezi'ni ziyaret edin.
auth_time talebini etkinleştirmek için:
- Google Auth Platform'u açın.
- Uygulamanız için projeyi seçin veya oluşturun
- Menüde Ayarlar'ı tıklayın.
- Gelişmiş Ayarlar bölümünde Oturum yaşı talepleri'ni seçerek
auth_timeözelliğini etkinleştirin.
Desteklenen özellikler
Bu bölümde, Güvenlik Paketi'ni oluşturan özellikler açıklanmaktadır.
auth_time
auth_time talebi, OpenID Connect protokolünün standart bir parçasıdır ve son kullanıcının Google ile en son kimlik doğruladığı zaman hakkında bilgi sağlar. Bu, Unix döneminden (1 Ocak 1970, 00:00:00 UTC) bu yana geçen saniye sayısını temsil eden bir JSON sayısıdır ve kullanıcının en son kimlik doğruladığı zamandır. Bu, kullanıcının Google Hesabı'na mevcut cihaz veya tarayıcıdan yaptığı son giriş etkinliğinin zaman damgası olarak düşünülebilir.
Bu talep, kimlik doğrulama ve kullanıcı hakkında doğrulanmış bilgiler içeren bir JSON Web Jetonu (JWT) olan kimlik jetonuna dahil edilir.
auth_time talebi, kullanıcının kullandığı cihazda veya tarayıcıda bir Google Hesabı'na ne kadar süre önce aktif olarak giriş yaptığını belirlemenize olanak tanıdığı için uygulamanız açısından değerlidir. Bu durum, özellikle aşağıdakiler gibi güvenlik amaçları için önemlidir:
Uygulamanızın, hesabı silme, hesap iletişim yöntemlerini değiştirme veya ödeme yapma gibi hassas kullanıcı işlemlerini gerçekleştirmeden önce ek bir adım adım kimlik doğrulama sorgulaması yapıp yapmaması gerektiği konusunda bilinçli bir karar verme. Google, Google Hesabı yeniden kimlik doğrulama isteklerini desteklemez.
Kullanıcının Google Hesabı oturumunun güncelliğini ve kararlılığını güven sinyali olarak kullanma. Genel olarak, yeni bir
auth_timedeğeri güncelliğin, eski bir değer ise kararlılığın göstergesidir.
Web uygulamalarında, kullanıcının Google Hesabı'nda oturum açmasından sonra kullanıcının tarayıcısı ve işletim sisteminin birleşimi oturum olarak kabul edilir.
Web siteniz de bağımsız olarak ayrı bir kullanıcı oturumu sürdürür. Daha yeni bir auth_time değeri, kullanıcının Google Hesabında yakın zamanda oturum açtığını gösterir.
Bu durum genellikle etkin ve ilgili bir kullanıcının göstergesidir ve daha düşük risk sinyali olarak yorumlanabilir.
Android gibi mobil platformlarda kullanıcılar genellikle parmak izi veya yüz tarama gibi biyometrik yöntemleri ve cihaza özel PIN ya da desen kilitlerini kullanarak doğrudan cihazlarında oturum açar. Mobil uygulamalar ve platformlar genellikle Google ile yeni bir oturum oluşturmak yerine bu platform tabanlı kimlik doğrulama yöntemlerini kullanır. Bu durum, Google Hesabı'nda oturum açma işlemlerinin seyrek yapılmasına ve auth_time ile ilgili güncellemelerin buna bağlı olarak seyrek yapılmasına neden olur. Bu nedenle, son auth_time değeri, uzun süredir devam eden bir Google Hesabı oturumunda değişiklik olduğunu ve dolayısıyla riskin arttığını gösterebilir.
Güven sinyalleri, incelikli bir konudur. auth_time, çok öğeli kimlik doğrulamanın (MFA) etkin olup olmadığı, kullanılan kimlik doğrulama yöntemi ve uygulamanız ile platformunuz arasındaki kullanıcı oturumunun süresi gibi diğer sinyallerle birlikte kullanılması beklenir.
auth_time isteği
auth_time talebinde bulunmak için kullanılan yöntem, kullanılan API'ye göre değişir. Ancak her API, auth_time talebinde bulunmak için isteğe bağlı bir claims parametresi içerir.
OIDC protokolü
OAuth Platformu'nu doğrudan kullanırken isteği, isteğe bağlı talepler istek parametresine ekleyerek auth_time isteğinde bulunun. İddialar JSON nesnesinin id_token
alanının değerini {"auth_time":{"essential":true}} olarak ayarlayın. Örneğin,
https://accounts.google.com/o/oauth2/v2/auth? response_type=id_token& client_id=YOUR_CLIENT_ID& scope=openid email profile& redirect_uri=https://example.com/user-login& nonce=123-456-7890& claims={"id_token":{"auth_time":{"essential":true}}}
Daha fazla bilgi için OpenID Connect başlıklı makaleyi inceleyin.
Web için GIS
Web için Google ile oturum açma kitaplığında ek taleplerde bulunmak üzere iki API (HTML ve JavaScript) bulunur. Örneğin, JavaScript API'yi kullanarak auth_time isteğinde bulunun:
<html>
<body>
<script src="https://accounts.google.com/gsi/client" async></script>
<script>
window.onload = function () {
google.accounts.id.initialize({
client_id: "YOUR_WEB_CLIENT_ID",
callback: function(rsp) { console.log(rsp.credential); },
essential_claims: "auth_time",
});
google.accounts.id.renderButton(
document.getElementById("buttonDiv"),
{ type: "standard", size: "large" }
);
}
</script>
<div id="buttonDiv"></div>
</body>
</html>Daha fazla bilgi için Web için Google ile Oturum Açma başlıklı makaleyi inceleyin.
Android için GIS
setClaims yöntemi ve Claim nesnesi, auth_time isteğinde bulunmak için kullanılır.
androidx.credentials:credentials-play-services-auth ve com.google.android.libraries.identity.googleid:googleid kitaplıklarının en yeni sürümlerini kullanmak için derleme bağımlılıklarınızı güncelleyin.
Oturum açma seçeneklerini eklemek için setClaims kullanarak Claim türünde bir auth_time nesnesi oluşturun:
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder() .setAutoSelectEnabled(true) .setFilterByAuthorizedAccounts(true) .setServerClientId(WEB_CLIENT_ID) .setNonce("NONCE") .setClaims(ImmutableList.of(new Claim("auth_time", true))) .build()
Daha fazla bilgi için Kullanıcıları Google ile oturum açma özelliğiyle doğrulama başlıklı makaleyi inceleyin.
iOS
iOS için Google ile oturum açma SDK'sı, authTimeClaim nesnesi ve claims parametresini, isteğe bağlı olarak auth_time isteğinde bulunmak için kullanılan GIDSignIn sınıfına ekler.
ASWebAuthenticationSession kullanan uygulamalar, cihaz genelinde paylaşılan bir çerez kavanozunu günceller. GIDSignIn, iOS 12 veya sonraki sürümlerde ve macOS 12.16 veya sonraki sürümlerde varsayılan olarak bu yöntemi kullanır. Bu senaryoda, Google Hesabı'nda oturum açan bir kullanıcının kimliği doğrulanır ve oturum, paylaşılan çerez kavanozunda saklanır.
Buradaki auth_time, kullanıcının cihazdaki son Google kimlik doğrulamasıdır (yalnızca uygulamanızdaki değil).
SFSafariViewController, WKWebView ve UIWebView, uygulamanızda yalıtılmış sanal ortamlarda çalışır. auth_time kullanırken bunları kullanmaktan kaçının. Burada
auth_time, kullanıcının uygulamada son oturum açma zamanı gösterilir. Değer her zaman güncel olduğundan bu metrik daha az anlamlıdır.
auth_time isteğinde bulunmak için GoogleSignIn bağımlılıklarını en son sürüme güncelleyin ve authTimeClaim nesnesi oluşturup claims kümesine ekleyin.
Swift
İddia kümesini GIDSignIn.sharedInstance.signIn yöntemine ekleyin:
let authTimeClaim = GIDClaim.authTime() let claims = Set([authTimeClaim])// Start the sign-in process GIDSignIn.sharedInstance.signIn( withPresenting: rootViewController, claims: claims ) { signInResult, error in guard let result = signInResult else { print("Error signing in: (error?.localizedDescription ?? "No error description")") return } // If sign in succeeded, display the app's main content View print("ID Token: (result.user.idToken?.tokenString ?? "No token")") }
Objective-C
İddia kümesini signInWithPresentingViewController yöntemine ekleyin:
GIDClaim *authTimeClaim = [GIDClaim authTimeClaim]; NSSet *claims = [NSSet setWithObject:authTimeClaim];// Include the claims set and start the sign-in process [GIDSignIn.sharedInstance signInWithPresentingViewController:self hint:nil claims:claims completion:^(GIDSignInResult * _Nullable signInResult, NSError * _Nullable error) { // On success signInResult.user.idToken // contains the requested claims. }];
Daha fazla bilgi için Google ile oturum açma özelliğini iOS veya macOS uygulamanıza entegre etme başlıklı makaleyi inceleyin.
auth_time yanıtı
auth_time hak talebi isteğe dahil edildiğinde, iss (veren), sub (konu), aud (kitle) ve exp (geçerlilik süresi) gibi diğer standart hak talepleriyle birlikte IDToken yük yanıtında görünür. auth_time talebinin değeri, kullanıcının kimlik doğrulaması en son gerçekleştiğinden beri Unix sıfır zamanından (1 Ocak 1970, 00:00:00 UTC) bu yana geçen saniye sayısını temsil eden bir JSON sayısıdır. Bu, auth_time talebini içeren, kodu çözülmüş bir kimlik jetonu örneğidir:
{ "iss": "https://accounts.google.com", "azp": "YOUR_CLIENT_ID", "aud": "YOUR_CLIENT_ID", "sub": "117726431651943698600", "email": "alice@example.com", "email_verified": true, "nonce": "123-456-7890", "auth_time": 1748875426, "nbf": 1748880889, "name": "Elisa Beckett", "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c", "given_name": "Elisa", "family_name": "Beckett", "iat": 1748881189, "exp": 1748884789, "jti": "8b5d7ce345787d5dbf14ce6e08a8f88ee8c9b5b1" }
Kimlik jetonu, JWT'nin yayınlandığı zamanı belirten bir iat (yayınlanma zamanı) talebi de içerir. iat ve auth_time taleplerini karşılaştırarak kullanıcının son kimlik doğrulamasından bu yana geçen süreyi, belirli kimlik jetonunun oluşturulma zamanına göre belirleyebilirsiniz. Örneğin, iat 1748881189 ve auth_time 1748875426 ise fark 5763 saniyedir. Bu da 1 saat, 36 dakika ve 3 saniyelik bir süreyi temsil eder.