Google Hesabı Bağlantısı, Google Hesabı sahiplerinin hizmetlerinize hızlı, sorunsuz ve güvenli bir şekilde bağlanmasını ve Google ile veri paylaşmasını sağlar.
Bağlı Hesapla 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 yeniden girmek zorunda kalmadan tek tıklamayla oturum açabilir. Bu da kullanıcıların deneyimini iyileştirir. Ayrıca, kullanıcıların hizmetinizde yinelenen hesaplar oluşturma olasılığını da azaltır.
Koşullar
Bağlantılı Hesapla Oturum Açma özelliğini uygulamak için aşağıdaki şartları yerine getirmeniz gerekir:
- OAuth 2.0 yetkilendirme kodu 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.
- jeton uç noktası'nı kullanın.
- userinfo uç noktası'nı kullanın.
- Android uygulamanız var.
İşleyiş şekli
Ön koşul : Kullanıcı daha önce hizmetinizde kendi Google Hesabını kendi hesabına bağlamıştır.
- One Tap ile Oturum Açma akışında bağlı hesapları göstermeyi etkinleştirirsiniz.
- Kullanıcıya, bağlı hesabını kullanarak 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.
- Akış sona erdiğinde uygulamanız da bir kimlik jetonu alır ve bu jetonu, kullanıcının uygulamanızda oturum açmak için aldığı kimlik jetonundaki kullanıcı tanımlayıcısıyla eşleştirirsiniz.
Android uygulamanızda Bağlı Hesap ile Oturum Açma özelliğini uygulama
Android uygulamanızda Bağlı Hesapla 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 verilen 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 istemci kimliği |
client_secret |
Google'a verdiğiniz zorunlu istemci sırrı |
access_token |
Gerekli Google'a verdiğiniz erişim jetonu. Bu bilgiyi kullanıcının bağlamını öğrenmek için kullanırsınız |
grant_type |
Zorunlu Değer urn:ietf:params:oauth:grant-type:reciprocal olarak AYARLANMALIDIR |
Jeton değişimi uç noktanız, aşağıdakileri yaparak POST isteğine yanıt vermelidir:
access_token
belgesininclient_id
tarafından tanımlanan Google'a verildiğini doğrulayın.- İstek geçerliyse ve yetkilendirme kodu, bir Google kimlik jetonuyla başarılı bir şekilde değiştirildiyse HTTP 200 (Tamam) yanıtı, istek geçersizse HTTP hata kodu ile yanıt verin.
HTTP Yanıtı
Başarılı
Döndür HTTP durum kodu: 200 OK
Ö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, 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 (ör. isteğin geçersiz bir istemci kimliği veya gizli anahtar içermesi) |
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ş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 |
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 kimliği 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 Uygulaması adlı kimlik bilgisi olur. |
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ğine ve doğrulanacağına ilişkin ayrıntıları içerir |
expires_in |
Erişim jetonunun kalan kullanım ömrü (saniye cinsinden) |
refresh_token |
Yeni bir erişim jetonu almak için kullanabileceğiniz bir 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
JWT onayını doğrulayın ve kodunu çözün
Diliniz için bir JWT kod çözme kitaplığı kullanarak JWT onayını doğrulayabilir ve kodunu çözebilirsiniz. Jetonun imzasını doğrulamak için Google'ın JWK veya PEM biçimlerinde bulunan genel anahtarlarını kullanın.
Kodu çözüldüğünde, JWT iddiası aşağıdaki örnekteki 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ğrulayarak ek olarak, öne sürdü en verenin (doğrulamak iss
alanı) olduğu https://accounts.google.com
seyirci (yani, aud
(alan) atanan istemci kimliğidir ve belirteç geçmediğini onaylayın exp
alan).
email
, email_verified
ve hd
alanlarını kullanarak Google'ın bir e-posta adresi barındırıp barındırmadığını ve yetkili olup olmadığını belirleyebilirsiniz. Google'ın yetkili olduğu durumlarda, kullanıcının şu anda yasal hesap sahibi olduğu biliniyor ve şifre veya diğer sorgulama yöntemlerini atlayabilirsiniz. Aksi takdirde, bu yöntemler bağlanmadan önce hesabı doğrulamak için kullanılabilir.
Google'ın yetkili olduğu durumlar:
-
email
bir@gmail.com
soneki var, bu bir Gmail hesabı. -
email_verified
true vehd
ayarlandı, bu bir G Suite hesabı.
Kullanıcılar, Gmail veya G Suite kullanmadan Google Hesaplarına kaydolabilir. email
bir @gmail.com
son eki içermediğinde ve hd
yoksa, Google yetkili değildir ve kullanıcıyı doğrulamak için şifre veya başka sınama yöntemleri önerilir. email_verfied
, Google, Google hesabı oluşturulduğunda kullanıcıyı başlangıçta doğruladığı için de doğru olabilir, ancak o zamandan beri üçüncü taraf e-posta hesabının sahipliği değişmiş olabilir.