Bağlı Hesapta Oturum Açma

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:

İşleyiş şekli

Ön koşul : Kullanıcı hizmetinizde, Google Hesabını kendi hesabına daha önce bağlamıştır.

  1. One Tap ile Oturum Açma akışı sırasında bağlı hesapları göstermeyi etkinleştirirsiniz.
  2. 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.
  3. 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.
  4. Google yetkilendirme kodunu, kullanıcının Google hesabıyla ilgili bilgileri içeren bir Google kimlik jetonuyla değiştirirsiniz.
  5. 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.
Şekil 1. Bağlantılı Hesap Oturum Açma Akışı. Kullanıcının cihazında birden fazla oturum açılmış hesap varsa kullanıcı bir hesap seçici görebilir ve yalnızca bağlı bir hesap seçtiğinde Bağlı Hesapla Oturum Açma görünümüne yönlendirilir.

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 belgesinin client_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

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 ve hd 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.