OAuth ile Google Hesabı Bağlama

Hesaplar, endüstri standardı OAuth 2.0 dolaylı ve yetkilendirme kodu akışları kullanılarak bağlanır. Hizmetiniz, OAuth 2.0 uyumlu yetkilendirme ve jeton değişimi uç noktalarını desteklemelidir.

Dolaysız akışta Google, kullanıcının tarayıcısında yetkilendirme uç noktanızı açar. Başarıyla oturum açtıktan sonra Google'a uzun süreli bir erişim jetonu döndürürsünüz. Bu erişim jetonu artık Google'dan gönderilen her isteğe dahil edilir.

Yetkilendirme kodu akışında iki uç noktaya ihtiyacınız vardır:

  • Oturum açmamış kullanıcılarınıza oturum açma kullanıcı arayüzünü sunan authorization uç noktası. Yetkilendirme uç noktası ayrıca kullanıcıların istenen erişim için iznini kaydetmek üzere kısa ömürlü bir yetkilendirme kodu oluşturur.

  • İki tür değişimden sorumlu olan jeton değişimi uç noktası:

    1. Yetkilendirme kodunu uzun ömürlü bir yenileme jetonu ve kısa ömürlü bir erişim jetonuyla değiştirir. Bu değişim, kullanıcı hesap bağlama akışında ilerlerken gerçekleşir.
    2. Uzun ömürlü yenileme jetonunu kısa ömürlü erişim jetonuyla değiştirir. Bu değişim, Google'ın süresi dolmuş olan erişim jetonu nedeniyle yeni bir erişim jetonuna ihtiyaç duyduğunda gerçekleşir.

OAuth 2.0 akışı seçme

Yarı açık akışın uygulanması daha kolay olsa da Google, yarı açık akış tarafından verilen erişim jetonlarının süresinin hiçbir zaman dolmaması gerektiğini önerir. Bunun nedeni, kullanıcının, jetonun süresi dolduğunda, gizli akışla hesabını tekrar bağlamaya zorlanmasıdır. Güvenlik nedeniyle jetonun son geçerlilik tarihine ihtiyacınız varsa bunun yerine yetkilendirme kodu akışını kullanmanızı önemle tavsiye ederiz.

Tasarım yönergeleri

Bu bölümde, OAuth bağlantı akışları için barındırdığınız kullanıcı ekranıyla ilgili tasarım şartları ve öneriler açıklanmaktadır. Google'ın uygulaması tarafından çağrıldıktan sonra platformunuz kullanıcıya Google'da oturum açma sayfası ve hesap bağlama izni ekranı gösterir. Kullanıcı, hesapları bağlama izni verdikten sonra Google'ın uygulamasına geri yönlendirilir.

Bu resimde, kullanıcının Google hesabını kimlik doğrulama sisteminize bağlama adımları gösterilmektedir. İlk ekran görüntüsü, platformunuzdan kullanıcı tarafından başlatılan bağlamayı gösterir. İkinci resimde kullanıcının Google'da oturum açması, üçüncü resimde ise kullanıcının Google Hesabını uygulamanıza bağlama izni ve onayı gösterilmektedir. Son ekran görüntüsünde, Google uygulamasında başarıyla bağlanmış bir kullanıcı hesabı gösterilmektedir.
Şekil 1. Hesap bağlama, kullanıcının Google'da oturum açma ve izin ekranları.

Şartlar

  1. Kullanıcının hesabının Google Home veya Google Asistan gibi belirli bir Google ürününe değil Google'a bağlanacağını bildirmeniz gerekir.

Öneriler

Aşağıdakileri yapmanızı öneririz:

  1. Google'ın Gizlilik Politikası'nı gösterin. İzin ekranına Google'ın Gizlilik Politikası'nın bağlantısını ekleyin.

  2. Paylaşılacak veriler. Google'ın kullanıcının hangi verilerini neden gerekli kıldığını net ve kısa bir dille açıklayın.

  3. Net bir harekete geçirici mesaj İzin ekranınızda "Kabul et ve bağla" gibi net bir harekete geçirici mesaj belirtin. Bunun nedeni, kullanıcıların hesaplarını bağlamak için Google ile hangi verileri paylaşmaları gerektiğini anlamalarıdır.

  4. İptal etme imkanı Kullanıcıların bağlantı oluşturmayı tercih etmemesi durumunda geri dönmelerine veya işlemi iptal etmelerine olanak tanıyacak bir yöntem sunun.

  5. Net oturum açma süreci. Kullanıcıların Google Hesaplarında oturum açmak için net bir yönteme (ör. kullanıcı adı ve şifre alanları veya Google ile oturum açma) sahip olduğundan emin olun.

  6. Bağlantı kaldırma yetkisi. Kullanıcıların bağlantıyı kaldırabileceği bir mekanizma (ör. platformunuzdaki hesap ayarlarının URL'si) sunun. Alternatif olarak, kullanıcıların bağlı hesaplarını yönetebilecekleri Google Hesabı'nın bağlantısını da ekleyebilirsiniz.

  7. Kullanıcı hesabını değiştirme olanağı Kullanıcılara hesaplarını değiştirmek için bir yöntem önerebilirsiniz. Bu, özellikle kullanıcıların birden fazla hesabı varsa yararlıdır.

    • Kullanıcının hesap değiştirmek için izin ekranını kapatması gerekiyorsa kullanıcının OAuth bağlama ve örtülü akışla istediği hesapta oturum açabilmesi için Google'a kurtarılabilir bir hata gönderin.
  8. Logonuzu ekleyin. İzin ekranında şirket logonuzu gösterin. Logonuzu yerleştirmek için stil yönergelerinizi kullanın. Google'ın logosunu da göstermek istiyorsanız Logolar ve ticari markalar başlıklı makaleyi inceleyin.

Projeyi oluşturma

Hesap bağlama özelliğini kullanacak şekilde projenizi oluşturmak için:

  1. Go to the Google API Console.
  2. Proje oluştur'u tıklayın.
  3. Bir ad girin veya oluşturulan öneriyi kabul edin.
  4. Kalan alanları onaylayın veya düzenleyin.
  5. Oluştur'u tıklayın.

Proje kimliğinizi görüntülemek için:

  1. Go to the Google API Console.
  2. Projenizi açılış sayfasındaki tabloda bulun. Proje kimliği Kimlik sütununda görünür.

Google Hesabı Bağlama işleminde, kullanıcılara, verilerine erişim isteyen uygulamanın, ne tür veriler istediklerini ve hangi şartların geçerli olacağını gösteren bir izin ekranı bulunur. Google API istemci kimliği oluşturmadan önce OAuth izin ekranınızı yapılandırmanız gerekir.

  1. Google API'ler Konsolu'nun OAuth izin ekranı sayfasını açın.
  2. İstenirse yeni oluşturduğunuz projeyi seçin.
  3. "OAuth izin ekranı" sayfasında formu doldurun ve "Kaydet" düğmesini tıklayın.

    Uygulama adı: İzin isteyen uygulamanın adı. Ad, uygulamanızı doğru şekilde yansıtmalı ve kullanıcıların başka yerlerde gördüğü uygulama adıyla tutarlı olmalıdır. Uygulama adı, hesap bağlama izin ekranında gösterilir.

    Uygulama logosu: İzin ekranında, kullanıcıların uygulamanızı tanımasına yardımcı olacak bir resim. Logo, hesap bağlama izin ekranında ve hesap ayarlarında gösterilir.

    Destek e-postası: Kullanıcıların rızalarıyla ilgili soruları için sizinle iletişime geçmesi amacıyla.

    Google API'leri için kapsamlar: Kapsamlar, uygulamanızın kullanıcınızın gizli Google verilerine erişmesine olanak tanır. Google Hesabı Bağlantısı kullanım alanı için varsayılan kapsam (e-posta, profil, openid) yeterlidir. Hassas kapsam eklemeniz gerekmez. Kapsamları önceden değil, erişimin gerekli olduğu zamanda, aşamalı olarak istemek genellikle en iyi uygulamadır. Daha fazla bilgi edinin.

    Yetkilendirilen alanlar: Google, sizi ve kullanıcılarınızı korumak için yalnızca OAuth kullanarak kimlik doğrulaması yapan uygulamaların Yetkilendirilen Alanları kullanmasına izin verir. Uygulamalarınızın bağlantıları, Yetkili Alanlar'da barındırılmalıdır. Daha fazla bilgi edinin.

    Uygulama ana sayfası bağlantısı: Uygulamanızın ana sayfası. Yetkili bir alanda barındırılmalıdır.

    Uygulama Gizlilik Politikası bağlantısı: Google Hesabı Bağlama izin ekranında gösterilir. Yetkilendirilen bir alanda barındırılmalıdır.

    Uygulama Hizmet Şartları bağlantısı (İsteğe bağlı): Yetkilendirilen bir alanda barındırılmalıdır.

    Şekil 1. Hayali bir Uygulama İçin İzin Ekranı Bağlama İzin Ekranı, Tunery

  4. "Doğrulama Durumu"nu kontrol edin. Başvurunuzun doğrulanması gerekiyorsa başvurunuzu doğrulamaya göndermek için "Doğrulama İçin Gönder" düğmesini tıklayın. Ayrıntılar için OAuth doğrulama koşullarına bakın.

OAuth sunucunuzu uygulama

Yetkilendirme kodu akışının OAuth 2.0 sunucu uygulaması şunlardan oluşur: iki uç noktanız vardır. İlk uç nokta kimlik doğrulama uç noktasıdır. Bu, kullanıcılara veri erişimi için kullanıcılardan izin almalarını Yetkilendirme uç noktası, oturum açmamış kullanıcılar için oturum açma kullanıcı arayüzünü sunar ve istenen erişim. İkinci uç nokta ise üçüncü uç noktadır. Jeton adı verilen ve kullanıcıya aşağıdakileri yapma yetkisi veren şifrelenmiş dizeleri elde etmek için kullanılır. hizmetinize erişin.

Bir Google uygulamasının, hizmetinizin API'lerinden birini çağırması gerektiğinde Google, kullanıcılarınızdan bu API'leri çağırmak için izin almak üzere bu uç noktaları bir araya getirin. oluşturabilirsiniz.

Google tarafından başlatılan bir OAuth 2.0 yetkilendirme kodu akışı oturumunda, takip eden akış:

  1. Google, yetkilendirme uç noktanızı kullanıcının tarayıcısında açar. Akış bir işlem için yalnızca ses içeren bir cihazda başlatıldığında Google yürütme sürecidir.
  2. Kullanıcı oturum açmış değilse oturum açar ve Google'a şunu yapması için izin verir: Henüz izin vermediyse verilerine API'nizle erişme.
  3. Hizmetiniz bir yetkilendirme kodu oluşturur ve Google'a geri gönderir. Yapılacaklar Bu nedenle, kullanıcının tarayıcısını, yetkilendirme koduyla birlikte tekrar Google'a yönlendirin. ekleyebilirsiniz.
  4. Google, yetkilendirme kodunu jeton değişimi uç noktanıza gönderir. Bu işlem kodun orijinalliğini doğrular ve bir erişim jetonu ve yenileme jetonu. Erişim jetonu, hizmetinizin Google tarafından API'lere erişmek için kimlik bilgisi olarak kabul eder. Yenileme jetonu uzun ömürlü yeni erişim jetonları almak üzere saklayabileceği ve kullanabileceği bir jeton olarak sona erecektir.
  5. Kullanıcı hesap bağlama akışını tamamladıktan sonra, isteği bir erişim jetonu içeriyor.

Yetkilendirme isteklerini işleme

OAuth 2.0 yetkilendirme kodunu kullanarak hesap bağlama işlemi gerçekleştirmeniz gerektiğinde akışında, Google, kullanıcıyı yetkilendirme uç noktanıza bir istek göndererek aşağıdaki parametreleri içerir:

Yetkilendirme uç noktası parametreleri
client_id Google'a atadığınız İstemci Kimliği.
redirect_uri Bu isteğe yanıt gönderdiğiniz URL.
state yönlendirme URI'si.
scope İsteğe bağlı: Google'ın yetkilendirme istediği veriler.
response_type Yanıtta döndürülecek değerin türü. OAuth 2.0 için yetkilendirme kodu akışı, yanıt türü her zaman code olur.
user_locale Google Hesabı dil ayarı RFC5646 biçimi, içeriğinizi kullanıcının tercih ettiği dilde yerelleştirmek için kullanılır.

Örneğin, yetkilendirme uç noktanız https://myservice.example.com/auth, talep aşağıdaki gibi görünebilir:

GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE

Yetkilendirme uç noktanızın oturum açma isteklerini işlemesi için aşağıdakileri yapın için şu adımları izleyin:

  1. client_id bilgisinin, Google'a atadığınız İstemci Kimliği ile eşleştiğini ve redirect_uri bilgisinin, Google tarafından hizmetiniz için sağladığı yönlendirme URL'si ile eşleştiğini doğrulayın. Bu kontroller, onay alınmasının önlenmesi açısından önemlidir. istenmeyen veya yanlış yapılandırılmış istemci uygulamalarına erişim. Birden fazla OAuth 2.0 akışları, response_type öğesinin code olduğunu da onaylayın.
  2. Kullanıcının hizmetinizde oturum açıp açmadığını kontrol edin. Kullanıcı oturum açmamışsa hizmetinizin oturum açma veya kayıt akışını tamamlayın.
  3. Google'ın API'nize erişmek için kullanması için bir yetkilendirme kodu oluşturun. Yetkilendirme kodu herhangi bir dize değeri olabilir, ancak benzersiz bir şekilde kullanıcıyı, jetonun ait olduğu istemciyi ve kodun geçerlilik bitiş tarihini ve tahmin edilebilir olmamalıdır. Genellikle, her ay web sitesinde sonra süresi dolan kodları kullanır.
  4. redirect_uri parametresiyle belirtilen URL'nin şu formu kullanın:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  5. Kullanıcının tarayıcısını redirect_uri parametresinden yararlanın. Alacağınız yetkilendirme kodunu URL'nin otomatik olarak oluşturulmuş ve orijinal, değiştirilmemiş durum değerini code ve state parametrelerini ekleyerek. Bu, sonuç URL'sinin örneği:
    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING

Jeton değişimi isteklerini işleme

Hizmetinizin jeton değişimi uç noktası iki tür jetondan sorumludur takaslar:

  • Erişim jetonları ve yenileme jetonları için yetkilendirme kodlarını gönderip alın
  • Erişim jetonları için yenileme jetonları değişimi

Jeton değişimi istekleri aşağıdaki parametreleri içerir:

Jeton değişimi uç nokta parametreleri
client_id İstek kaynağını Google olarak tanımlayan bir dize. Bu dize sisteminizde Google'ın benzersiz tanımlayıcısı olarak kayıtlı olmalıdır.
client_secret Hizmetiniz için Google'a kaydettiğiniz gizli dize.
grant_type Değişen jetonun türü. Ya da authorization_code veya refresh_token.
code grant_type=authorization_code olduğunda bu parametre Google'ın oturum açma işleminizden veya jeton değişiminizden aldığı kod uç nokta.
redirect_uri grant_type=authorization_code olduğunda bu parametre İlk yetkilendirme isteğinde kullanılan URL.
refresh_token grant_type=refresh_token olduğunda bu parametre Google'ın jeton değişimi uç noktanızdan aldığı yenileme jetonu.
Erişim jetonları ve yenileme jetonları için yetkilendirme kodlarını gönderip alın

Kullanıcı oturum açtıktan ve yetkilendirme uç noktanız kısa ömürlü bir uyarı döndürdükten yetkilendirme kodu Google'a gönderilirse Google, jeton değişiminize bir istek gönderir uç nokta aracılığıyla yetkilendirme kodunu erişim jetonu ve yenileme için değiştirin jeton.

Bu istekler için grant_type değeri authorization_code ve code değeri, daha önce verdiğiniz yetkilendirme kodunun değeridir Google'a otomatik olarak gönderin. Aşağıda, erişim jetonu ve yenileme jetonu için yetkilendirme kodu:

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

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI

Bir erişim jetonu ve yenileme jetonuyla yetkilendirme kodları değişimi yapmak için jeton değişimi uç noktası, aşağıdaki komutu çalıştırarak POST isteklerine yanıt verir için şu adımları izleyin:

  1. client_id öğesinin, istek kaynağını yetkili bir kaynak olarak tanımladığını doğrulayın ve client_secret değerinin beklenen değerle eşleştiğinden emin olun.
  2. Yetkilendirme kodunun geçerli olduğunu, süresinin dolmadığını ve İstekte belirtilen istemci kimliği, yetkilendirme kodu.
  3. redirect_uri parametresi tarafından belirtilen URL'nin aynı olduğunu onaylayın ilk yetkilendirme isteğinde kullanılan değerle aynıdır.
  4. Yukarıdaki ölçütlerin tümünü doğrulayamazsanız bir HTTP döndürün Gövde olarak {"error": "invalid_grant"} kullanılırken 400 Hatalı İstek hatası.
  5. Aksi takdirde, yenileme oluşturmak için yetkilendirme kodundaki kullanıcı kimliğini kullanın. jetonu ve erişim jetonu bulunur. Bu jetonlar herhangi bir dize değeri olabilir, ancak kullanıcıyı ve jetonun ait olduğu istemciyi benzersiz bir şekilde temsil etmelidir ve tahmin edilebilir olmamalıdır. Erişim jetonları için Jetonu girmeniz gerekir. Bu işlem genellikle siz jetonun verilmesinden bir saat sonradır. Yenileme jetonlarının geçerlilik süresi sona ermez.
  6. HTTPS yanıtının gövdesinde aşağıdaki JSON nesnesini döndürün:
    {
    "token_type": "Bearer",
    "access_token": "ACCESS_TOKEN",
    "refresh_token": "REFRESH_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }

Google, kullanıcı için erişim jetonunu ve yenileme jetonunu depolar ve kayıtlar erişim jetonunun süresinin dolması. Erişim jetonunun süresi dolduğunda Google, yenileme jetonunu kullanın.

Erişim jetonları için yenileme jetonları değişimi

Bir erişim jetonunun süresi dolduğunda Google, jeton değişiminize bir istek gönderir yeni bir erişim jetonuyla yenileme jetonu değişimi yapmasına olanak tanır.

Bu istekler için grant_type değeri refresh_token ve refresh_token değeri, daha önce verdiğiniz yenileme jetonunun değeridir. Google'a dokunun. Aşağıda, bir yenileme jetonu değiş tokuşuna ilişkin bir istek örneği verilmiştir şu adımları izleyin:

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

client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

Yenileme jetonunu bir erişim jetonuyla değiştirmek için jeton değişimi uç noktanız POST isteklerine aşağıdaki adımları uygulayarak yanıt verir:

  1. client_id öğesinin, istek kaynağını Google olarak tanımladığını ve client_secret değerinin beklenen değerle eşleştiğinden emin olun.
  2. Yenileme jetonunun geçerli olduğunu ve İstek, yenileme jetonuyla ilişkili istemci kimliğiyle eşleşir.
  3. Yukarıdaki ölçütlerin tümünü doğrulayamazsanız HTTP 400 döndürün Gövde olarak {"error": "invalid_grant"} kullanıldığında hatalı İstek hatası oluştu.
  4. Aksi takdirde, erişim oluşturmak için yenileme jetonundaki kullanıcı kimliğini kullanın. jeton. Bu jetonlar herhangi bir dize değeri olabilir, ancak benzersiz olmaları gerekir jetonun ait olduğu kullanıcıyı ve müşteriyi temsil etmeli, tahmin edilebilir. Erişim jetonları için jetonun geçerlilik bitiş zamanını da kaydedin. genellikle jetonu göndermenizden bir saat sonra gönderilir.
  5. HTTPS gövdesinde aşağıdaki JSON nesnesini döndürün yanıt:
    {
    "token_type": "Taşıyıcı",
    "access_token": "ACCESS_TOKEN",
    "expires_in": SECONDS_TO_EXPIRATION
    }
ziyaret edin.
Handle userinfo requests

The userinfo endpoint is an OAuth 2.0 protected resource that return claims about the linked user. Implementing and hosting the userinfo endpoint is optional, except for the following use cases:

After the access token has been successfully retrieved from your token endpoint, Google sends a request to your userinfo endpoint to retrieve basic profile information about the linked user.

userinfo endpoint request headers
Authorization header The access token of type Bearer.

For example, if your userinfo endpoint is available at https://myservice.example.com/userinfo, a request might look like the following:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

For your userinfo endpoint to handle requests, do the following steps:

  1. Extract access token from the Authorization header and return information for the user associated with the access token.
  2. If the access token is invalid, return an HTTP 401 Unauthorized error with using the WWW-Authenticate Response Header. Below is an example of a userinfo error response:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    If a 401 Unauthorized, or any other unsuccessful error response is returned during the linking process, the error will be non-recoverable, the retrieved token will be discarded and the user will have to initiate the linking process again.
  3. If the access token is valid, return and HTTP 200 response with the following JSON object in the body of the HTTPS response:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    If your userinfo endpoint returns an HTTP 200 success response, the retrieved token and claims are registered against the user's Google account.

    userinfo endpoint response
    sub A unique ID that identifies the user in your system.
    email Email address of the user.
    given_name Optional: First name of the user.
    family_name Optional: Last name of the user.
    name Optional: Full name of the user.
    picture Optional: Profile picture of the user.

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.