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 dolaylı akışını desteklemek için hizmetiniz bir yetkilendirme yapar uç nokta ile kullanılabilir. Bu uç nokta, kimlik doğrulama ve güvenlikten ve verilere erişim için kullanıcılardan izin alınması gerekir. Yetkilendirme uç noktası Henüz oturum açmamış kullanıcılarınıza bir oturum açma kullanıcı arayüzü sunar ve istenen erişim için izin verin.

Bir Google uygulamasının, hizmetinizin yetkili API'lerinden birini çağırması gerektiğinde Google, bu API'leri çağırmak amacıyla kullanıcılarınızdan izin almak için bu uç noktayı kullanır oluşturabilirsiniz.

Google tarafından başlatılan tipik bir OAuth 2.0 örtülü akış oturumunda, takip eden akış:

  1. Google, yetkilendirme uç noktanızı kullanıcının tarayıcısında açar. İlgili içeriği oluşturmak için kullanılan 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.
  2. Hizmetiniz bir erişim jetonu oluşturur ve bu jetonu Google'a dokunun. Bunun için, kullanıcının tarayıcısını yeniden erişim iznine sahip Google'a yönlendirin. isteğe ekli jeton.
  3. Google, hizmetinizin API'lerini çağırır ve erişim jetonunu dikkat edin. Hizmetiniz, erişim jetonunun Google'a ve ardından API çağrısını tamamlar.

Yetkilendirme isteklerini işleme

Bir Google uygulamasının, OAuth 2.0 aracılığıyla hesap bağlama işlemi gerçekleştirmesi gerektiğinde gizli akış kullanıyorsanız Google, kullanıcıyı bir isteği gönderin:

Yetkilendirme uç noktası parametreleri
client_id Google'a atadığınız istemci kimliği.
redirect_uri Bu isteğe yanıt gönderdiğiniz URL.
state yönlendirme URI'si.
response_type Yanıtta döndürülecek değerin türü. OAuth 2.0 dolaylı için akışında, yanıt türü her zaman token 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&response_type=token&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. Aşağıdaki işlemler için client_id ve redirect_uri değerlerini doğrulayın: istenmeyen veya yanlış yapılandırılmış istemci uygulamalarına erişim verilmesini önleyin:

    • client_id değerinin, kullandığınız istemci kimliğiyle eşleştiğini doğrulayın Google'a atanmıştır.
    • redirect_uri tarafından belirtilen URL'yi doğrulayın parametresi aşağıdaki biçimdedir:
      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çmamışsa hizmetinizin oturum açma veya kaydolma akışını tamamlayın.

  3. Google'ın API'nize erişmek için kullanacağı bir erişim jetonu oluşturun. İlgili içeriği oluşturmak için kullanılan erişim jetonu herhangi bir dize değeri olabilir, ancak jetonun ait olduğu ve tahmin edilememesi gerekir.

  4. Kullanıcının tarayıcısını URL'ye yönlendiren bir HTTP yanıtı gönderme redirect_uri parametresiyle belirtilir. Aşağıdakilerin tümünü dahil edin: aşağıdaki parametreleri kullanabilirsiniz:

    • access_token: Az önce oluşturduğunuz erişim jetonu
    • token_type: bearer dizesi
    • state: Orijinal durumdaki değiştirilmemiş durum değeri istek

    Sonuçta elde edilen URL'nin bir örneği aşağıda verilmiştir:

    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, erişim jetonunu alır ve state değerinin değişmediğinden emin olun. Google, hizmetiniz için erişim jetonu kullanıyorsanız Google, jetonu sonraki çağrılara ekler kullanıma sunun.

Kullanıcı bilgileri isteklerini işleme

userinfo uç noktası, bağlı kullanıcıyla ilgili hak taleplerini döndüren, OAuth 2.0 korumalı bir kaynaktır. Kullanıcı bilgileri uç noktasını uygulamak ve barındırmak, aşağıdaki kullanım alanları hariç isteğe bağlıdır:

Erişim jetonu, jeton uç noktanızdan başarıyla alındıktan sonra Google, bağlı kullanıcıyla ilgili temel profil bilgilerini almak için kullanıcı bilgileri uç noktanıza bir istek gönderir.

kullanıcı bilgileri uç nokta istek başlıkları
Authorization header Taşıyıcı türündeki erişim jetonu.

Örneğin, kullanıcı bilgileri uç noktanız https://myservice.example.com/userinfo, talep 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 jetonunu çıkarın ve erişim jetonuyla ilişkilendirilmiş kullanıcının bilgilerini döndürün.
  2. Erişim jetonu geçersizse WWW-Authenticate yanıt üstbilgisini kullanarak HTTP 401 Yetkilendirilmemiş hatası döndürün. Aşağıda kullanıcı bilgileri hata yanıtı örneği verilmiştir:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    . Bağlama işlemi sırasında 401 Yetkilendirilmedi veya başka bir başarısız hata yanıtı döndürülürse bu hata düzeltilemez, alınan jeton silinir ve kullanıcının bağlantı oluşturma işlemini yeniden başlatması gerekir.
  3. Erişim jetonu geçerliyse HTTPS gövdesinde aşağıdaki JSON nesnesiyle HTTP 200 yanıtını döndürün ve HTTP 200 yanıtını alın yanıt:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    
    Kullanıcı bilgileri uç noktanız HTTP 200 başarılı yanıtı döndürürse alınan jeton ve hak talepleri kullanıcının Google Hesabı'na kaydedilir.

    userinfo uç nokta yanıtı
    sub Sisteminizdeki 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.