Google Hesabı Bağlantısı, Google Hesabı sahiplerinin hizmetlerinize hızlı, sorunsuz ve güvenli bir şekilde bağlanarak Google ile veri paylaşmasını sağlar.
Bağlı Hesapta Oturum Açma, Google Hesapları hizmetinize bağlı olan kullanıcılar için Google ile One Tap ile Oturum Açma özelliğini etkinleştirir. Bu sayede kullanıcılar, kullanıcı adlarını ve şifrelerini tekrar girmek zorunda kalmadan tek tıklamayla oturum açabildikleri için daha iyi bir deneyim yaşarlar. Ayrıca, kullanıcıların hizmetinizde yinelenen hesaplar oluşturma olasılığını da azaltır.
Şartlar
Bağlı Hesapta Oturum Açma özelliğini uygulamak için aşağıdaki koşulları karşılamanız gerekir:
- OAuth 2.0 yetkilendirme kodu akışını destekleyen bir Google Hesabı OAuth Bağlantısı uygulamanız vardır. OAuth uygulamanız aşağıdaki uç noktaları içermelidir:
- Android uygulamanız var.
İşleyiş şekli
Ön koşul : Kullanıcı, hizmetinizdeki hesabına daha önce Google Hesabını bağlamıştır.
- Tek dokunuşla oturum açma akışı sırasında bağlı hesapları göstermeyi etkinleştirirsiniz.
- Kullanıcıya, bağlı hesabıyla hizmetinizde oturum açma seçeneği içeren bir One Tap ile Oturum Açma istemi gösterilir.
- Kullanıcı bağlı hesapla devam etmeyi seçerse Google, yetkilendirme kodunu kaydetmek için jeton uç noktanıza bir istek gönderir. İstek, kullanıcının hizmetiniz tarafından verilen erişim jetonunu ve bir Google yetkilendirme kodunu içerir.
- Google yetkilendirme kodunu, kullanıcının Google Hesabı hakkında bilgi içeren bir Google kimliği jetonuyla değiştirirsiniz.
- Ayrıca uygulamanız, akış tamamlandığında bir kimlik jetonu alır ve kullanıcının uygulamanızda oturum açmasını sağlamak için bunu sunucunuz tarafından alınan kimlik jetonundaki kullanıcı tanımlayıcısıyla eşleştirirsiniz.
Android uygulamanızda Bağlı Hesapta Oturum Açma özelliğini uygulama
Android uygulamanızda Bağlı Hesapta Oturum Açma özelliğini desteklemek için Android uygulama kılavuzundaki talimatları uygulayın.
Google'dan gelen yetkilendirme kodu isteklerini işleme
Google, kullanıcının kimlik jetonu karşılığında kullandığınız bir yetkilendirme kodunu kaydetmek için jeton uç noktanıza bir POST isteği gönderir. İstek, kullanıcının erişim jetonunu ve Google tarafından verilen bir OAuth2 yetkilendirme kodunu içerir.
Yetkilendirme kodunu kaydetmeden önce, erişim jetonunun sizin tarafınızdan Google'a verildiğini ve bu jetonun client_id
tarafından tanımlandığını doğrulamanız gerekir.
HTTP İsteği
Örnek istek
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=urn:ietf:params:oauth:grant-type:reciprocal
&client_id=CLIENT_ID
&client_secret=CLIENT_SECRET
&access_token=ACCESS_TOKEN
Jeton değişimi uç noktanız, aşağıdaki istek parametrelerini işleyebilmelidir:
Jeton uç noktası parametreleri | |
---|---|
code |
Zorunlu Google OAuth2 yetkilendirme kodu |
client_id |
Zorunlu Google'a verdiğiniz istemci kimliği |
client_secret |
Zorunlu Google'a verdiğiniz istemci sırrı |
access_token |
Zorunlu Google'a verdiğiniz erişim jetonu. Kullanıcının bağlamını anlamak için |
grant_type |
Zorunlu Değerin urn:ietf:params:oauth:grant-type:reciprocal olarak ayarlanması ZORUNLUDUR |
Jeton değişimi uç noktanız, aşağıdakileri yaparak POST isteğine yanıt vermelidir:
access_token
ödülünün,client_id
tarafından tanımlanan Google'a verildiğini doğrulayın.- İstek geçerliyse ve yetkilendirme kodu başarıyla Google kimliği jetonuyla değiştirilirse HTTP 200 (OK) yanıtı ya da istek geçersizse HTTP hata kodu ile yanıt verin.
HTTP Yanıtı
Başarılı
HTTP durum kodu döndür 200 (Tamam)
Örnek başarı yanıtı
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{}
Hatalar
Geçersiz bir HTTP isteği olması durumunda aşağıdaki HTTP hata kodlarından biriyle yanıt verin:
HTTP Durum Kodu | Metin | Açıklama |
---|---|---|
400 | {"error": "invalid_request"} |
İstekte bir parametre eksik olduğundan sunucu, isteği işleme koyamıyor. İstek desteklenmeyen bir parametre içeriyorsa veya bir parametreyi tekrarlıyorsa da bu döndürülebilir |
401 | {"error": "invalid_request"} |
İsteğin geçersiz bir istemci kimliği veya gizli anahtar içermesi gibi durumlarda istemci kimlik doğrulaması başarısız oldu |
401 | {"error": "invalid_token"}
"WWW-Authentication: Bearer" ifadesini ekleyin yanıt başlığında kimlik doğrulama sorgulaması |
İş ortağı erişim jetonu geçersiz. |
403 | {"error": "insufficient_permission"}
"WWW-Authentication: Bearer" ifadesini ekleyin yanıt başlığında kimlik doğrulama sorgulaması |
İş ortağı erişim jetonu, Karşılıklı OAuth'u gerçekleştirmek için gerekli kapsamları içermiyor |
500 | {"error": "internal_error"} |
Sunucu hatası |
Hata yanıtı aşağıdaki alanları içermelidir :
Hata yanıtı alanları | |
---|---|
error |
Zorunlu Hata dizesi |
error_description |
Hatanın kullanıcılar tarafından okunabilen açıklaması |
error_uri |
Hata hakkında daha fazla ayrıntı sağlayan URI |
Örnek hata 400 yanıtı
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"error": "invalid_request",
"error_description": "Request was missing the 'access_token' parameter."
}
Kimlik jetonu için yetkilendirme kodu değişimi
Aldığınız yetkilendirme kodunu, kullanıcının Google Hesabı hakkında bilgiler içeren bir Google kimliği jetonuyla değiştirmeniz gerekir.
Google kimliği jetonuyla yetkilendirme kodu değişimi yapmak için https://oauth2.googleapis.com/token
uç noktasını çağırın ve aşağıdaki parametreleri ayarlayın:
İstek alanları | |
---|---|
client_id |
Zorunlu API Konsolu Kimlik bilgileri sayfasından alınan istemci kimliği. Bu genellikle New Actions on Google Uygulaması adlı kimlik bilgisi olur |
client_secret |
Zorunlu API Konsolu Kimlik bilgileri sayfasından alınan istemci gizli anahtarı |
code |
Zorunlu İlk istekte gönderilen yetkilendirme kodu |
grant_type |
Zorunlu OAuth 2.0 spesifikasyonunda tanımlandığı gibi, bu alanın değeri authorization_code olarak ayarlanmalıdır. |
Örnek istek
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=GOOGLE_AUTHORIZATION_CODE
&grant_type=authorization_code
&client_id=GOOGLE_CLIENT_ID
&client_secret=GOOGLE_CLIENT_SECRET
Google bu isteğe kısa ömürlü erişim jetonu ve yenileme jetonu içeren bir JSON nesnesi döndürerek yanıt verir.
Yanıt aşağıdaki alanları içerir:
Yanıt alanları | |
---|---|
access_token |
Uygulamanızın bir Google API isteğini yetkilendirmek için gönderdiği, Google tarafından verilen erişim jetonu |
id_token |
Kimlik jetonu, kullanıcının Google Hesabı bilgilerini içerir. Yanıtı Doğrulama bölümünde, kimlik jetonu yanıtının kodunun nasıl çözüleceği ve nasıl doğrulanacağıyla ilgili ayrıntılar yer alır. |
expires_in |
Erişim jetonunun saniye cinsinden kalan ömrü |
refresh_token |
Yeni bir erişim jetonu almak için kullanabileceğiniz jeton. Yenileme jetonları kullanıcı erişimi iptal edene kadar geçerlidir |
scope |
Bağlı Hesapta Oturum Açma kullanım alanı için bu alanın değeri her zaman openid olarak ayarlanır. |
token_type |
Döndürülen jetonun türü. Şu anda bu alanın değeri her zaman Bearer olarak ayarlanmıştır |
Örnek yanıt
HTTP/1.1 200 OK
Content-type: application/json; charset=utf-8
{
"access_token": "Google-access-token",
"id_token": "Google-ID-token",
"expires_in": 3599,
"token_type": "Bearer",
"scope": "openid",
"refresh_token": "Google-refresh-token"
}
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=Google authorization code
&grant_type=authorization_code
&client_id=Google client id
&client_secret=Google client secret
Kimlik Jetonu yanıtını doğrulayın
JWT onayını doğrulama ve kodunu çözme
JWT onayını doğrulamak ve kodunu çözmek için Diliniz için JWT kod çözme kitaplığı. Tekliflerinizi otomatikleştirmek ve optimize etmek için Google'ın genel anahtarları JWK veya PEM biçimlerini doğrulamak için jetonun imzası.
Kodu çözüldüğünde JWT onayı aşağıdaki örnek gibi görünür:
{ "sub": "1234567890", // The unique ID of the user's Google Account "iss": "https://accounts.google.com", // The assertion's issuer "aud": "123-abc.apps.googleusercontent.com", // Your server's client ID "iat": 233366400, // Unix timestamp of the assertion's creation time "exp": 233370000, // Unix timestamp of the assertion's expiration time "name": "Jan Jansen", "given_name": "Jan", "family_name": "Jansen", "email": "jan@gmail.com", // If present, the user's email address "email_verified": true, // true, if Google has verified the email address "hd": "example.com", // If present, the host domain of the user's GSuite email address // If present, a URL to user's profile picture "picture": "https://lh3.googleusercontent.com/a-/AOh14GjlTnZKHAeb94A-FmEbwZv7uJD986VOF1mJGb2YYQ", "locale": "en_US" // User's locale, from browser or phone settings }.
Jetonun imzasını doğrulamanın yanı sıra onaylamanın
iss
alanı https://accounts.google.com
ise,
(aud
alanı) atanmış istemci kimliğinizdir ve jetonun süresinin dolmadığından emin olun.
(exp
alanı).
email
, email_verified
ve hd
alanlarını kullanarak aşağıdakilerin geçerli olup olmadığını belirleyebilirsiniz:
Google, e-posta adreslerini barındırır ve bu adres konusunda yetkilidir. Google'ın,
kullanıcının şu anda meşru hesap sahibi olduğu bilinen yetkili
Ayrıca şifre veya diğer sorgulama yöntemlerini atlayabilirsiniz. Aksi halde bu yöntemler
önce hesabı doğrulamak için kullanılabilir.
Google'ın yetkili olduğu durumlar:
email
adresinin@gmail.com
son eki var. Bu bir Gmail hesabı.email_verified
doğru vehd
ayarlandı. Bu bir G Suite hesabı.
Kullanıcılar, Gmail veya G Suite kullanmadan Google Hesaplarına kaydolabilir. Zaman
email
, @gmail.com
son eki içermiyor ve hd
mevcut değilse Google
kimlik doğrulama, şifre veya diğer sorgulama yöntemlerinin önerildiğini
gösterir. email_verified
, Google ilk olarak
kullanıcı hesabı sırasında üçüncü tarafın
e-posta hesabı değişmiş olabilir.