OAuth ile Google Hesabı Bağlama

Hesaplar, sektör standardı OAuth 2.0 örtülü ve yetkilendirme kodu akışları kullanılarak bağlanır. Hizmetiniz OAuth 2.0 uyumlu yetkilendirmeyi ve jeton değişimi uç noktalarını desteklemelidir.

Dolaylı akışta Google, yetkilendirme uç noktanızı kullanıcının tarayıcısında açar. Başarılı bir şekilde oturum açtıktan sonra Google'a uzun süreli erişim jetonu döndürürsiniz. 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:

  • Yetkilendirme uç noktası, oturum açmamış kullanıcılara oturum açma kullanıcı arayüzünü sunar. Yetkilendirme uç noktası, kullanıcıları kaydetmek için kısa süreli bir yetkilendirme kodu da oluşturur.

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

    1. Uzun süreli yenileme jetonu ve kısa süreli erişim jetonu için bir yetkilendirme kodu değiştirir. Bu exchange, kullanıcı hesap bağlama akışından geçtiğinde gerçekleşir.
    2. Kısa ömürlü erişim jetonu için uzun ömürlü yenileme jetonu alır. Bu exchange, Google'ın süresi dolmuş olduğundan yeni bir erişim jetonuna ihtiyacı olduğunda gerçekleşir.

OAuth 2.0 akışı seçme

Doğrudan akışın uygulanması daha basit olsa da Google, dolaylı akış tarafından verilen erişim jetonlarının süresinin hiçbir zaman sona ermemesini önerir. Bunun nedeni, gizli jetonla bir jetonun süresi dolduktan sonra kullanıcının hesabını tekrar bağlamaya zorlamasıdır. Güvenlik nedeniyle jetonun geçerlilik süresinin dolması gerekiyorsa yetkilendirme kodu akışını kullanmanızı kesinlikle öneririz.

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 gereksinimleri ve öneriler açıklanmaktadır. Platform, Google uygulaması tarafından çağrıldıktan sonra Google sayfasında oturum açma ve kullanıcıya hesap bağlama izni ekranını gösterir. Kullanıcı, hesapların bağlanmasına izin verdikten sonra tekrar Google'ın uygulamasına yönlendirilir.

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

Ş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ı inceleyin. İzin ekranına Google'ın Gizlilik Politikası'nın bir bağlantısını ekleyin.

  2. Paylaşılacak veriler. Google'a hangi verilerle neden ihtiyaç duyduğunu açıklamak için açık ve net bir dil kullanın.

  3. Harekete geçirici mesaj net olarak ifade edilsin. İ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 hangi verileri Google ile paylaşmaları gerektiğini anlamalarıdır.

  4. İptal etme. Bağlantı oluşturmamayı seçen kullanıcıların geri dönmesi veya iptal etmesi için bir yol sağlayın.

  5. Oturum açma işlemini temizleyin. Kullanıcıların Google hesaplarında oturum açmak için kullanıcı adları ve şifre alanları veya Google ile oturum açma gibi açık yöntemleri olduğundan emin olun.

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

  7. Kullanıcı hesabını değiştirme yetkisi. Kullanıcıların hesaplarını değiştirmeleri için bir yöntem önerin. Bu, özellikle kullanıcıların birden fazla hesabı varsa faydalıdır.

    • Kullanıcının hesap değiştirmek için izin ekranını kapatması gerekiyorsa Google'a kurtarılabilir bir hata gönderin. Böylece, OAuth bağlantısı ve örtük akışla istediğiniz hesapta oturum açabilir.
  8. Logonuzu ekleyin. Onay ekranında şirket logonuzu görüntüleyin. Logonuzu yerleştirmek için stil yönergelerinizi kullanın. Google'ın logosunu da göstermek isterseniz Logolar ve ticari markalar konusuna bakın.

Projeyi oluşturma

Hesap bağlamayı kullanmak amacıyla 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şlemi, uygulamanın verilerine erişmek isteyen kullanıcılara, istedikleri veri türlerini ve geçerli şartları bildiren bir izin ekranı içerir. Google API istemci kimliği oluşturmadan önce OAuth izin ekranınızı yapılandırmanız gerekir.

  1. Google API'leri konsolunun OAuth izin ekranı sayfasını açın.
  2. İstenirse az önce oluşturduğunuz projeyi seçin.
  3. "OAuth izin ekranı" sayfasında formu doldurun ve "Save" (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 bir yerde gördüğü uygulama adıyla tutarlı olmalıdır. Uygulama adı, Hesap Bağlama izin ekranında gösterilir.

    Uygulama logosu: Kullanıcı rızası 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 içindir.

    Google API'leri için kapsamlar: Kapsamlar, uygulamanızın kullanıcınızın özel Google verilerine erişmesine olanak tanır. Google Hesabı Bağlama kullanım alanı için varsayılan kapsam (e-posta, profil, openid) yeterlidir. Herhangi bir hassas kapsam eklemeniz gerekmez. Kapsamları önceden değil de aşamalı olarak erişim talep etmek genellikle en iyi uygulamadır. Daha fazla bilgi edinin.

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

    Uygulama Ana Sayfası bağlantısı: Uygulamanız için ana sayfa. Yetkilendirilen Alanda barındırılmalıdır.

    Uygulama Gizlilik Politikası bağlantısı: Google Hesabı bağlama izin ekranında gösterilir. Yetkilendirilen 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. Google Hesabı ile Hayali Bir Uygulama İçin İzin Ekranını Bağlama, Tunery

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

OAuth sunucunuzu uygulama

OAuth 2.0 örtülü akışını desteklemek için, servis HTTPS tarafından kullanılabilir bir yetkilendirme bitiş noktası yapar. Bu uç nokta, kimlik doğrulamasından ve veri erişimi için kullanıcılardan onay alınmasından sorumludur. Yetkilendirme uç noktası, henüz oturum açmamış olan kullanıcılarınıza bir oturum açma kullanıcı arabirimi sunar ve istenen erişime yönelik onayları kaydeder.

Bir Google uygulamasının hizmetinizin yetkili API'lerinden birini çağırması gerektiğinde, Google bu uç noktayı, kullanıcılarınızdan bu API'leri onlar adına çağırma izni almak için kullanır.

Google tarafından başlatılan tipik bir OAuth 2.0 örtülü akış oturumu aşağıdaki akışa sahiptir:

  1. Google, yetkilendirme uç noktanızı kullanıcının tarayıcısında açar. Kullanıcı, henüz oturum açmadıysa oturum açar ve henüz izin vermemişse Google'a API'niz ile verilerine erişme izni verir.
  2. Servis Google'a bir belirteç erişim ve döner oluşturur. Bunu yapmak için, isteğe bağlı erişim belirteci ile kullanıcının tarayıcısını tekrar Google'a yönlendirin.
  3. Google, hizmetinizin API'lerini çağırır ve her istekle erişim belirtecini ekler. Hizmetiniz, erişim belirtecinin Google'a API'ye erişme yetkisi verdiğini doğrular ve ardından API çağrısını tamamlar.

Yetkilendirme isteklerini işleme

Bir Google uygulamasının bir OAuth 2.0 örtülü akışı aracılığıyla hesap bağlama gerçekleştirmesi gerektiğinde, Google, aşağıdaki parametreleri içeren bir istekle kullanıcıyı yetkilendirme uç noktanıza gönderir:

Yetkilendirme uç noktası parametreleri
client_id Google'a atadığınız müşteri kimliği.
redirect_uri Bu isteğe yanıt gönderdiğiniz URL.
state Yönlendirme URI'sinde değiştirilmeden Google'a geri gönderilen bir defter tutma değeri.
response_type Yanıtta döndürülecek değer türü. OAuth 2.0 örtülü akışı için, tepki türü her zaman bir token .
user_locale Google Hesabı dil ayarı RFC5646 formatında kullanıcının tercih ettiği dilde içerik yerelleştirilmesine kullandı.

Yetkilendirme son nokta mevcuttur Örneğin, https://myservice.example.com/auth bir istek 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&response_type=token&user_locale=LOCALE

Yetkilendirme uç noktanızın oturum açma isteklerini işlemesi için aşağıdaki adımları uygulayın:

  1. Doğrulama client_id ve redirect_uri istenmeyen veya yanlış yapılandırılmış istemci uygulamalara erişim sağlamalarını engellemek için değerler:

    • Onayla o client_id Google'a atanan istemci kimliğini eşleşir.
    • URL tarafından belirtilen Onayla redirect_uri parametre aşağıdaki forma sahiptir:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
      
  2. Kullanıcının hizmetinizde oturum açıp açmadığını kontrol edin. Kullanıcı oturum açmadıysa hizmetinizin oturum açma veya kaydolma akışını tamamlayın.

  3. Google'ın API'nize erişmek için kullanması için bir erişim belirteci oluşturun. Erişim belirteci herhangi bir dize değeri olabilir, ancak belirtecin ait olduğu kullanıcıyı ve istemciyi benzersiz bir şekilde temsil etmeli ve tahmin edilemez olmalıdır.

  4. Tarafından belirtilen URL'ye kullanıcının tarayıcısını yönlendiren bir HTTP yanıtı gönder redirect_uri parametresi. URL parçasına aşağıdaki parametrelerin tümünü ekleyin:

    • access_token : Size belirteci erişim sadece oluşturulan
    • token_type : string bearer
    • state : Orijinal isteğinden değiştirilmemiş durum değeri

    Şu elde edilen URL bir örneğidir:

    https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID#access_token=ACCESS_TOKEN&token_type=bearer&state=STATE_STRING

Google'ın OAuth 2.0 yönlendirme işleyicisi bu belirteç erişim ve onaylar aldığı state değeri değişmedi. Google, hizmetiniz için bir erişim belirteci edindikten sonra, Google, hizmet API'lerinize yapılan sonraki çağrılara belirteci ekler.

Kullanıcı bilgisi isteklerini işleme

Userınfo uç OAth 2.0 korumalı bir kaynak olduğunu bağlı kullanıcı hakkında geri istemler. Userinfo uç noktasının uygulanması ve barındırılması, aşağıdaki kullanım durumları dışında isteğe bağlıdır:

Erişim belirteci, belirteç uç noktanızdan başarıyla alındıktan sonra Google, bağlantılı kullanıcı hakkında temel profil bilgilerini almak için userinfo uç noktanıza bir istek gönderir.

userinfo uç nokta istek üstbilgileri
Authorization header Taşıyıcı türünde erişim belirteci.

Örneğin, senin Userınfo son nokta mevcut ise https://myservice.example.com/userinfo bir istek aşağıdaki gibi görünebilir:

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

Kullanıcı bilgileri uç noktanızın istekleri işlemesi için aşağıdaki adımları uygulayın:

  1. Yetkilendirme başlığından erişim belirtecini çıkarın ve erişim belirteci ile ilişkili kullanıcı için bilgi döndürün.
  2. Erişim kodu geçersiz ise, kullanarak HTTP 401 Yetkisiz hata döndürür WWW-Authenticate Tepki Başlığını. Aşağıda, bir Userınfo hatası yanıtının bir örneği aşağıda verilmektedir:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    izinsiz veya başka bir başarısız hata yanıtı bağlama işlemi esnasında döndürülen bir 401 hata geri kazanımı mümkün olmayan olacak, Alınan belirteç atılır ve kullanıcı olacaktır bağlama işlemini yeniden başlatmak için.
  3. Erişim belirteci geçerli, dönüş ve HTTPS yanıt metnine aşağıdaki JSON nesnesi ile HTTP 200 yanıt ise:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    
    senin userinfo uç nokta döner HTTP 200 başarı yanıtı ise belirteç alınır ve iddialar kullanıcının Google'a karşı kayıtlıdır hesap.

    userinfo uç nokta yanıtı
    sub Sisteminizde kullanıcıyı tanımlayan benzersiz bir kimlik.
    email Kullanıcının e-posta adresi.
    given_name İsteğe bağlı: kullanıcının adı.
    family_name İsteğe bağlı: kullanıcının soyadı.
    name İsteğe bağlı: kullanıcının tam adı.
    picture İsteğe bağlı: Kullanıcının profil resmi.

Uygulamanızı doğrulama

Sen kullanarak uygulanmasını doğrulamak OAuth 2.0 Bahçesi aracı.

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

  1. Yapılandırma tıklayın OAuth 2.0 Yapılandırma penceresini açın.
  2. OAuth akış alanında, istemci tarafı seçin.
  3. OAuth Endpoints alanında, Özel'i seçin.
  4. OAuth 2.0 uç noktanızı ve Google'a atadığınız müşteri kimliğini ilgili alanlarda belirtin.
  5. Adım 1 bölümünde, herhangi bir Google kapsamları seçmeyin. Bunun yerine, bu alanı boş bırakın veya sunucunuz için geçerli bir kapsam (veya OAuth kapsamları kullanmıyorsanız rastgele bir dize) yazın. İşiniz bittiğinde, Yetkilendirme API'leri tıklayın.
  6. Aşama 2 ile Aşama 3 bölümlerde OAuth 2.0 akışı geçmesi ve istendiği gibi her aşama çalıştığını doğrulamak.

Sen kullanarak uygulanmasını doğrulamak Google Hesap Bağlama Demo aracı.

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

  1. Oturum Google düğmesiyle 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. Başlangıç Demo tıklayın.
  6. İstendiğinde, bağlantı isteğini kabul edip reddedebileceğinizi onaylayın.
  7. Platformunuza yönlendirildiğinizi onaylayın.