Google Hesabı Bağlama, Google Hesabı sahiplerinin hizmetlerinize hızlı, sorunsuz ve güvenli bir şekilde bağlanmasına ve Google ile veri paylaşmasına olanak tanır.
Bağlantılı Hesapla Oturum Açma, Google Hesaplarını hizmetinize bağlamış olan kullanıcıların One Tap ile Google ile Oturum Açma özelliğini etkinleştirir. Bu özellik, kullanıcı adlarını ve şifrelerini tekrar girmek zorunda kalmadan tek bir tıklamayla oturum açabilen kullanıcıların deneyimini iyileştirir. Ayrıca, kullanıcıların hizmetinizde yinelenen hesaplar oluşturma ihtimalini de azaltır.
Koşullar
Bağlantılı Hesapta Oturum Açma özelliğini kullanmak için aşağıdaki şartları yerine getirmeniz gerekir:
- OAuth 2.0 yetkilendirme kod akışını destekleyen bir Google Hesabı OAuth Bağlantısı uygulamanız olmalıdır. OAuth uygulamanız aşağıdaki uç noktaları içermelidir:
- yetkilendirme uç noktasını kullanın.
- Erişim ve yenileme jetonlarını işleme almak için jeton uç noktası.
- userinfo uç noktası.
- Bir Android uygulamanız var.
İşleyiş şekli
Ön koşul : Kullanıcı hizmetinizde, Google Hesabını kendi hesabına daha önce bağlamıştır.
- One Tap ile 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ğini içeren 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, hizmetiniz tarafından verilen kullanıcı erişim jetonunu ve bir Google yetkilendirme kodunu içerir.
- Google yetkilendirme kodunu, kullanıcının Google hesabıyla ilgili bilgileri içeren bir Google kimlik jetonuyla değiştirirsiniz.
- Uygulamanız ayrıca akış bittiğinde bir kimlik jetonu alır ve bunu, kullanıcının uygulamanızda oturum açmak için sunucunuz tarafından alınan kimlik jetonundaki kullanıcı tanımlayıcısıyla eşleştirirsiniz.
![Bağlantılı Hesapta Oturum Aç'a dokunun.](https://developers.google.cn/static/identity/one-tap/android/images/linked-account-signin.png?authuser=0000&hl=tr)
Bağlantılı Hesapla Oturum Açma özelliğini Android uygulamanıza uygulama
Android uygulamanızda Bağlantılı Hesapta Oturum Açma özelliğini desteklemek için Android uygulama kılavuzundaki talimatları izleyin.
Google'dan gelen yetkilendirme kodu isteklerini yerine getirme
Google, kullanıcının kimlik jetonuyla değiştirdiğiniz 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 düzenlenmiş bir OAuth2 yetkilendirme kodunu içerir.
Yetkilendirme kodunu kaydetmeden önce, client_id
ile tanımlanan erişim jetonunun sizin tarafınızdan Google'a verildiğini 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ç nokta parametreleri | |
---|---|
code |
Zorunlu Google OAuth2 yetkilendirme kodu |
client_id |
Google'a verdiğiniz zorunlu Client-ID |
client_secret |
Zorunlu Google'a verdiğiniz istemci sırrı |
access_token |
Gerekli Google'a verdiğiniz erişim jetonu. Bunu kullanıcının bağlamını anlamak için kullanacaksınız |
grant_type |
Zorunlu Değer urn:ietf:params:oauth:grant-type:reciprocal olarak ayarlanması ZORUNLUDUR |
Jeton değişimi uç noktanız, POST isteğine aşağıdakileri yaparak yanıt vermelidir:
access_token
belgesininclient_id
tarafından tanımlanan Google'a verildiğini doğrulayın.- İstek geçerliyse ve yetkilendirme kodu, Google kimlik jetonuyla başarılı bir şekilde değiştirildiyse HTTP 200 (OK) yanıtı, istek geçersizse HTTP hata kodu ile yanıt verin.
HTTP Yanıtı
Başarılı
Döndürme HTTP durum kodu 200 Tamam
Örnek başarılı 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ğe devam edemiyor. Bu hata, isteğin desteklenmeyen bir parametre içermesi veya bir parametreyi tekrarlaması durumunda da döndürülebilir |
401 | {"error": "invalid_request"} |
İstemci kimlik doğrulaması başarısız oldu (örneğin, istekte geçersiz istemci kimliği veya gizli anahtar) |
401 | {"error": "invalid_token"}
Yanıt başlığına "WWW-Authentication: Bearer" kimlik doğrulama sorgulamasını ekleyin |
İş ortağı erişim jetonu geçersiz. |
403 | {"error": "insufficient_permission"}
Yanıt başlığına "WWW-Authentication: Bearer" kimlik doğrulama sorgulamasını ekleyin |
İş ortağı erişimi jetonu, Karşılıklı OAuth 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 |
Gerekli Hata dizesi |
error_description |
Hatanın kullanıcılar tarafından okunabilir 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 bilgi içeren bir Google kimlik jetonuyla değiştirmeniz gerekir.
Bir yetkilendirme kodunu Google kimlik jetonuyla değiştirmek 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 App adlı kimlik bilgisi olacaktır |
client_secret |
Gerekli API Konsolu Kimlik Bilgileri sayfasından alınan istemci gizli anahtarı |
code |
Gerekli İ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ü, kimlik jetonu yanıtının kodunun nasıl çözüleceği ve doğrulanacağıyla ilgili ayrıntıları içerir |
expires_in |
Erişim jetonunun kalan ömrü (saniye cinsinden) |
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 |
Bu alanın değeri, Bağlı Hesapta Oturum Açma kullanım alanı için 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ğrulama
Validate and decode the JWT assertion
You can validate and decode the JWT assertion by using a JWT-decoding library for your language. Use Google's public keys, available in JWK or PEM formats, to verify the token's signature.
When decoded, the JWT assertion looks like the following example:
{ "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 }
In addition to verifying the token's signature, verify that the assertion's
issuer (iss
field) is https://accounts.google.com
, that the audience
(aud
field) is your assigned client ID, and that the token has not expired
(exp
field).
Using the email
, email_verified
and hd
fields you can determine if
Google hosts and is authoritative for an email address. In cases where Google is
authoritative the user is currently known to be the legitimate account owner
and you may skip password or other challenges methods. Otherwise, these methods
can be used to verify the account prior to linking.
Cases where Google is authoritative:
email
has a@gmail.com
suffix, this is a Gmail account.email_verified
is true andhd
is set, this is a G Suite account.
Users may register for Google Accounts without using Gmail or G Suite. When
email
does not contain a @gmail.com
suffix and hd
is absent Google is not
authoritative and password or other challenge methods are recommended to verify
the user. email_verfied
can also be true as Google initially verified the
user when the Google account was created, however ownership of the third party
email account may have since changed.