OAuth ve Google ile Oturum Açma ile Basitleştirilmiş Bağlantı

Genel Bakış

OAuth tabanlı Google ile Oturum Açma Kolaylaştırılmış bağlantı, OAuth bağlantısı. Bu, tüm kullanıcılar için sorunsuz bir bağlantı Google kullanıcıları için geçerli olur. Hesap oluşturma imkanı da kullanıcının Google hesaplarını kullanarak hizmetinizde yeni bir hesap oluşturmasına olanak tanır.

OAuth ve Google ile Oturum Açma ile hesap bağlama işlemi gerçekleştirmek için aşağıdaki genel talimatları uygulayın. için şu adımları izleyin:

  1. İlk olarak kullanıcıdan Google profiline erişim izni vermesini isteyin.
  2. Kullanıcı hesabının mevcut olup olmadığını kontrol etmek için profilindeki bilgileri kullanın.
  3. Mevcut kullanıcılar için hesapları bağlayın.
  4. Kimlik doğrulama sisteminizde Google kullanıcısı için eşleşme bulamıyorsanız Google'dan alınan kimlik jetonunu doğrulayın. Ardından, oluşturduğunuz kimlik jetonunda bulunan profil bilgilerini kullanır.
Bu şekilde, bir kullanıcının basitleştirilmiş bağlantı akışını kullanarak Google hesabını bağlama adımları gösterilmektedir. İlk ekran görüntüsünde, kullanıcının bağlantı oluşturmak için uygulamanızı nasıl seçebileceği gösteriliyor. İkinci ekran görüntüsü, kullanıcının hizmetinizde mevcut bir hesabı olup olmadığını onaylamasını sağlar. Üçüncü ekran görüntüsü, kullanıcının bağlantı oluşturmak istediği Google Hesabı'nı seçebilmesini sağlar. Dördüncü ekran görüntüsünde, Google hesabını uygulamanıza bağlama onayı gösteriliyor. Beşinci ekran görüntüsünde, Google uygulamasında başarıyla bağlanmış bir kullanıcı hesabı gösteriliyor.

Şekil 1. Kolaylaştırılmış Bağlantı ile kullanıcının telefonunda Hesap Bağlama

Kolaylaştırılmış bağlantı koşulları

ziyaret edin.

OAuth sunucunuzu uygulama

Jeton değişimi uç noktanız check, create, get amaçlarını desteklemelidir. Aşağıda, hesap bağlama akışıyla tamamlanan adımlar gösterilmektedir ve farklı amaçların ne zaman çağrıldığı belirtilmektedir:

  1. Kullanıcının kimlik doğrulama sisteminizde hesabı var mı? (Kullanıcı EVET veya HAYIR'ı seçerek karar verir)
    1. EVET : Kullanıcı, platformunuzda oturum açmak için Google Hesabı ile ilişkilendirilmiş e-posta adresini mi kullanıyor? (Kullanıcı EVET veya HAYIR'ı seçerek karar verir)
      1. EVET : Kullanıcının kimlik doğrulama sisteminizde eşleşen bir hesabı var mı? (check intent, onaylamak için çağrılır)
        1. EVET : get intent çağrılır ve get intent başarılı bir şekilde döndürülürse hesap bağlanır.
        2. HAYIR : Yeni Hesap Oluşturulsun mu? (Kullanıcı EVET veya HAYIR'ı seçerek karar verir)
          1. EVET : create intent çağrılır ve intent oluşturma isteği başarıyla döndürülürse hesap bağlanır.
          2. HAYIR : Web OAuth akışı tetiklenir, kullanıcı tarayıcısına yönlendirilir ve kullanıcıya farklı bir e-posta ile bağlantı oluşturma seçeneği sunulur.
      2. HAYIR : Web OAuth akışı tetiklenir, kullanıcı tarayıcısına yönlendirilir ve kullanıcıya farklı bir e-posta ile bağlantı oluşturma seçeneği sunulur.
    2. HAYIR : Kullanıcının kimlik doğrulama sisteminizde eşleşen bir hesabı var mı? (check intent, onaylamak için çağrılır)
      1. EVET : get intent çağrılır ve get intent başarılı bir şekilde döndürülürse hesap bağlanır.
      2. HAYIR : create intent çağrılır ve intent oluşturma isteği başarıyla döndürülürse hesap bağlanır.

Mevcut kullanıcı hesabı olup olmadığını kontrol etme (amacı kontrol edin)

Kullanıcı Google profiline erişim izni verdikten sonra Google, isteği tarafından sağlanır. İlgili içeriği oluşturmak için kullanılan onay işlemi, kullanıcının Google Hesabı kimliğini, ve e-posta adresini girin. Sizin için yapılandırılan jeton değişimi uç noktası: bu isteği yerine getirir.

İlgili Google Hesabı zaten kimlik doğrulamanızda mevcutsa kullanıyorsanız jeton değişimi uç noktanız account_found=true ile yanıt verir. Öğe Google Hesabı mevcut bir kullanıcıyla eşleşmiyor, jeton değişimi uç noktanız account_found=false ile birlikte HTTP 404 Bulunamadı hatası döndürüyor.

Talep aşağıdaki biçimdedir:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=check&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

Jeton değişimi uç noktanız aşağıdaki parametreleri işleyebilmelidir:

Jeton uç noktası parametreleri
intent Bu istekler için bu parametrenin değeri şu şekildedir: check
grant_type Değişen jetonun türü. Söz konusu parametresi urn:ietf:params:oauth:grant-type:jwt-bearer değerine sahiptir.
assertion Google Cloud konsolunun imzalı onayını sağlayan bir JSON Web Token (JWT) kullanıcı kimliği. JWT, kullanıcının Google Hesabı kimliği, adı ve e-posta adresi.
client_id Google'a atadığınız istemci kimliği.
client_secret Google'a atadığınız istemci gizli anahtarı.

check intent isteklerine yanıt vermek için jeton değişimi uç noktanızın aşağıdaki adımları uygulaması gerekir:

  • JWT onayını doğrulayın ve kodunu çözün.
  • Google hesabının kimlik doğrulama sisteminizde olup olmadığını kontrol edin.
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 and hd 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_verified 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.

Google Hesabı'nın kimlik doğrulama sisteminizde olup olmadığını kontrol edin

Aşağıdaki koşullardan herhangi birinin doğru olup olmadığını kontrol edin:

  • Onaylamanın sub alanında bulunan Google Hesabı kimliği kullanıcınızda yer alır.
  • Onaylamadaki e-posta adresi, kullanıcı veritabanınızdaki bir kullanıcıyla eşleşiyor.

İki koşul da doğruysa kullanıcı zaten kaydolmuş demektir. Böyle bir durumda, şuna benzer bir yanıt döndür:

HTTP/1.1 200 Success
Content-Type: application/json;charset=UTF-8

{
  "account_found":"true",
}

Belgede belirtilen Google Hesabı Kimliği veya e-posta adresi Onaylama, veritabanınızdaki bir kullanıcıyla eşleşiyorsa kullanıcı henüz kaydolmadı. İçinde Bu durumda, jeton değişimi uç noktanızın HTTP 404 hatasıyla yanıt vermesi gerekir değerini döndürür, aşağıdaki örnekte olduğu gibi: "account_found": "false"

HTTP/1.1 404 Not found
Content-Type: application/json;charset=UTF-8

{
  "account_found":"false",
}

Otomatik bağlamayı yönetme (amaca alma)

Kullanıcı Google profiline erişim izni verdikten sonra Google, isteği tarafından sağlanır. İlgili içeriği oluşturmak için kullanılan onay işlemi, kullanıcının Google Hesabı kimliğini, ve e-posta adresini girin. Sizin için yapılandırılan jeton değişimi uç noktası: bu isteği yerine getirir.

İlgili Google Hesabı zaten kimlik doğrulamanızda mevcutsa yeni bir sistem yüklediğinizde, jeton değişimi uç noktanız kullanıcı için bir jeton döndürür. Öğe Google Hesabı mevcut bir kullanıcıyla eşleşmiyor, jeton değişimi uç noktanız bir linking_error hatası ve isteğe bağlı login_hint döndürür.

Talep aşağıdaki biçimdedir:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&intent=get&assertion=JWT&scope=SCOPES&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

Jeton değişimi uç noktanız aşağıdaki parametreleri işleyebilmelidir:

Jeton uç noktası parametreleri
intent Bu istekler için bu parametrenin değeri get şeklindedir.
grant_type Değişen jetonun türü. Söz konusu parametresi urn:ietf:params:oauth:grant-type:jwt-bearer değerine sahiptir.
assertion Google Cloud konsolunun imzalı onayını sağlayan bir JSON Web Token (JWT) kullanıcı kimliği. JWT, kullanıcının Google Hesabı kimliği, adı ve e-posta adresi.
scope İsteğe bağlı: Google'ın istekte bulunacak şekilde yapılandırdığınız tüm kapsamlar yardımcı olur.
client_id Google'a atadığınız istemci kimliği.
client_secret Google'a atadığınız istemci gizli anahtarı.

get intent isteklerine yanıt vermek için jeton değişimi uç noktanızın aşağıdaki adımları uygulaması gerekir:

  • JWT onayını doğrulayın ve kodunu çözün.
  • Google hesabının kimlik doğrulama sisteminizde olup olmadığını kontrol edin.
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 and hd 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_verified 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.

Google Hesabı'nın kimlik doğrulama sisteminizde olup olmadığını kontrol edin

Aşağıdaki koşullardan herhangi birinin doğru olup olmadığını kontrol edin:

  • Onaylamanın sub alanında bulunan Google Hesabı kimliği kullanıcınızda yer alır.
  • Onaylamadaki e-posta adresi, kullanıcı veritabanınızdaki bir kullanıcıyla eşleşiyor.

Kullanıcı için bir hesap bulunursa bir erişim jetonu yayınlayın ve değerleri, aşağıdaki örnekte gösterildiği gibi HTTPS yanıtınızın gövdesinde bir JSON nesnesinin içinde döndürün:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",

  "refresh_token": "REFRESH_TOKEN",

  "expires_in": SECONDS_TO_EXPIRATION
}
.

Bazı durumlarda kimlik jetonuyla hesap bağlama işlemi kullanıcı için başarısız olabilir. Eğer herhangi bir nedenle olursa jeton değişimi uç noktanızın bir HTTP Aşağıdaki örnekte gösterildiği gibi, error=linking_error belirten 401 hatası:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

Google linking_error ile ilgili bir 401 hatası yanıtı aldığında, Google kullanıcıyı parametre olarak login_hint ile yetkilendirme uç noktanıza yönlendirin. İlgili içeriği oluşturmak için kullanılan Kullanıcı, tarayıcıdaki OAuth bağlantı akışını kullanarak hesap bağlama işlemini tamamladığında.

Google ile Oturum Açma aracılığıyla hesap oluşturma işlemini yönetme (amaç oluşturma)

Kullanıcının hizmetinizde hesap oluşturması gerektiğinde Google bir istekte bulunur intent=create değerini belirten jeton değişimi uç noktanıza bağlayın.

Talep aşağıdaki biçimdedir:

POST /token HTTP/1.1
Host: oauth2.example.com
Content-Type: application/x-www-form-urlencoded

response_type=token&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&scope=SCOPES&intent=create&assertion=JWT&client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET

Jeton değişimi uç noktanız aşağıdaki parametreleri işleyebilmelidir:

Jeton uç noktası parametreleri
intent Bu istekler için bu parametrenin değeri create şeklindedir.
grant_type Değişen jetonun türü. Söz konusu parametresi urn:ietf:params:oauth:grant-type:jwt-bearer değerine sahiptir.
assertion Google Cloud konsolunun imzalı onayını sağlayan bir JSON Web Token (JWT) kullanıcı kimliği. JWT, kullanıcının Google Hesabı kimliği, adı ve e-posta adresi.
client_id Google'a atadığınız istemci kimliği.
client_secret Google'a atadığınız istemci gizli anahtarı.

assertion parametresindeki JWT, kullanıcının Google Hesabı kimliğini içerir. adınızı ve e-posta adresinizi girin. Bu bilgileri geliştirmenizi sağlar.

create intent isteklerine yanıt vermek için jeton değişimi uç noktanızın aşağıdaki adımları uygulaması gerekir:

  • JWT onayını doğrulayın ve kodunu çözün.
  • Kullanıcı bilgilerini doğrulayın ve yeni hesap oluşturun.
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 and hd 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_verified 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.

Kullanıcı bilgilerini doğrulayın ve yeni hesap oluşturun

Aşağıdaki koşullardan herhangi birinin doğru olup olmadığını kontrol edin:

  • Onaylamanın sub alanında bulunan Google Hesabı kimliği kullanıcınızda yer alır.
  • Onaylamadaki e-posta adresi, kullanıcı veritabanınızdaki bir kullanıcıyla eşleşiyor.

İki koşul da doğruysa kullanıcıdan mevcut hesabını bağlamasını isteyin. oturum açın. Bunu yapmak için isteğe HTTP 401 hatasıyla yanıt verin error=linking_error belirtir ve kullanıcının e-posta adresini login_hint. Aşağıda örnek bir yanıt verilmiştir:

HTTP/1.1 401 Unauthorized
Content-Type: application/json;charset=UTF-8

{
  "error":"linking_error",
  "login_hint":"foo@bar.com"
}

Google linking_error ile ilgili bir 401 hatası yanıtı aldığında, Google kullanıcıyı parametre olarak login_hint ile yetkilendirme uç noktanıza yönlendirin. İlgili içeriği oluşturmak için kullanılan Kullanıcı, tarayıcıdaki OAuth bağlantı akışını kullanarak hesap bağlama işlemini tamamladığında.

İki koşul da doğru değilse söz konusu bilgileri kullanarak yeni bir kullanıcı hesabı oluşturun bu formu doldurmanızı öneririm. Yeni hesaplarda genellikle belirlenmiş bir şifre bulunmaz. İnsanların Google ile Oturum Açma'yı diğer platformlara eklemenizi önerdi. uygulamanızın tüm platformlarında Google ile giriş yapın. Alternatif olarak kullanıcıya şifre kurtarma akışınızı başlatan bir bağlantı göndererek diğer platformlarda oturum açmak için şifre belirlemesine izin verin.

Oluşturma işlemi tamamlandığında bir erişim jetonu düzenleyin ve yenilenen jetonu ve değerleri şurada bir JSON nesnesinin içinde döndürür: aşağıdaki örnekte olduğu gibi HTTPS yanıtınızın gövdesini yazın:

{
  "token_type": "Bearer",
  "access_token": "ACCESS_TOKEN",

  "refresh_token": "REFRESH_TOKEN",

  "expires_in": SECONDS_TO_EXPIRATION
}

Google API İstemci Kimliğinizi alın

Hesap Bağlama kayıt işlemi sırasında Google API İstemci Kimliğinizi sağlamanız gerekecektir.

OAuth Bağlama adımlarını tamamlarken oluşturduğunuz projeyi kullanarak API İstemci Kimliğinizi almak için. Bunun için aşağıdaki adımları uygulayın:

  1. Google Etiket Yöneticisi'nin Credentials (Kimlik Bilgileri) sayfasını Google API konsolu.
  2. Bir Google API'leri projesi oluşturun veya seçin.

    Projenizde Web Uygulaması Türü için bir İstemci Kimliği yoksa Kimlik bilgileri oluştur > OAuth İstemci Kimliği oluşturun. E-postanızın içeriğini Yetkili JavaScript kaynakları kutusuna sitenizin alanını girin. Gerçekleştirdiğiniz performans yerel testler veya geliştirme için hem http://localhost hem de Yetkili JavaScript kaynakları alanına http://localhost:<port_number>.

Uygulamanızı doğrulama

OAuth 2.0 Playground aracını kullanarak uygulamanızı doğrulayabilirsiniz.

Aracı kullanarak aşağıdaki adımları uygulayın:

  1. OAuth 2.0 Yapılandırması penceresini açmak için Yapılandırma'yı tıklayın.
  2. OAuth akışı alanında İstemci tarafı'nı seçin.
  3. OAuth Uç Noktaları alanında Özel'i seçin.
  4. İlgili alanlarda OAuth 2.0 uç noktanızı ve Google'a atadığınız istemci kimliğini belirtin.
  5. 1. Adım bölümünde herhangi bir Google kapsamı seçmeyin. Bunun yerine bu alanı boş bırakın veya sunucunuz için geçerli bir kapsam yazın (veya OAuth kapsamları kullanmıyorsanız rastgele bir dize yazın). İşlemi tamamladığınızda API'leri yetkilendir'i tıklayın.
  6. 2. Adım ve 3. Adım bölümlerinde OAuth 2.0 akışını uygulayın ve her adımın istenen şekilde çalıştığını doğrulayın.

Google Hesabı Bağlantı Demo aracını kullanarak uygulamanızı doğrulayabilirsiniz.

Araçta aşağıdaki adımları uygulayın:

  1. Google ile oturum aç düğmesini tıklayın.
  2. Bağlamak istediğiniz hesabı seçin.
  3. Hizmet kimliğini girin.
  4. İsteğe bağlı olarak, erişim isteyeceğiniz bir veya daha fazla kapsam girin.
  5. Demoyu Başlat'ı tıklayın.
  6. Sorulduğunda, bağlantı isteğini onaylayabileceğinizi ve reddedebileceğinizi onaylayın.
  7. Platformunuza yönlendirildiğinizi onaylayın.