OAuth ile Google Hesabı bağlantısı (Dolaylı Akış - Arşivlenmiş)

Hizmetiniz, OAuth 2.0 örtülü akışını desteklemek için HTTPS üzerinden bir yetkilendirme uç noktası sunar. Bu uç nokta, kimlik doğrulama ve veri erişimi için kullanıcılardan izin alma işlemlerinden sorumludur. 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 izni kaydeder.

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

Google Hesabı bağlantısı: OAuth Dolaylı Akışı

Aşağıdaki sıra diyagramı, Kullanıcı, Google ve hizmetinizin uç noktaları arasındaki etkileşimleri ayrıntılı olarak açıklar.

Kullanıcı Google Uygulaması / Tarayıcı Kimlik Doğrulama Uç Noktanız 1. Kullanıcı, bağlantı oluşturma işlemini başlatır 2. Yetkilendirme uç noktasına yönlendirme (GET) client_id, redirect_uri, state, scope 3. Oturum Açma ve İzin Ekranını Gösterme 4. Kullanıcı Kimliğini Doğrular ve İzin Verir 5. Jetonla Google'a yönlendirme (GET) access_token, state 6. Mağaza kullanıcı jetonları 7. Kullanıcı kaynaklarına erişme
Şekil 1. Google Hesabı bağlantısı için OAuth 2.0 Dolaylı Akışındaki etkinlik sırası.

Roller ve sorumluluklar

Aşağıdaki tabloda, Google Hesabı bağlantısı (GAL) OAuth dolaylı akışındaki aktörlerin rolleri ve sorumlulukları tanımlanmaktadır. GAL'de Google'ın OAuth istemcisi, hizmetinizin ise kimlik/hizmet sağlayıcısı olarak hareket ettiğini unutmayın.

İşlemi gerçekleştiren / Bileşen GAL Rolü Sorumluluklar
Google Uygulaması / Sunucusu OAuth İstemcisi Akışı başlatır, tarayıcı yönlendirmesini kullanarak erişim jetonunu alır ve hizmetinizin API'lerine erişmek için güvenli bir şekilde saklar.
Yetkilendirme uç noktanız Yetkilendirme Sunucusu Kullanıcılarınızın kimliğini doğrular, izinlerini alır ve doğrudan Google'a uzun süreli erişim jetonları verir.
Google Yönlendirme URI'si Geri Arama Uç Noktası Kullanıcı yönlendirmesini, URL parçasında access_token ve state değerleriyle birlikte yetkilendirme hizmetinizden alır.

Google tarafından başlatılan tipik bir OAuth 2.0 dolaylı 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 Google'a, henüz izin vermediyse API'nizle verilerine erişme izni verir.
  2. Hizmetiniz bir erişim jetonu oluşturur ve bunu Google'a döndürür. Bunun için kullanıcının tarayıcısını, isteğe erişim jetonu eklenmiş şekilde Google'a yönlendirin.
  3. Google, hizmetinizin API'lerini çağırır ve her isteğe erişim jetonunu ekler. Hizmetiniz, erişim jetonunun Google'a API'ye erişim yetkisi verdiğini doğrular ve ardından API çağrısını tamamlar.

Uygulama Tarifi

Örtülü akışı uygulamak için aşağıdaki adımları uygulayın.

1. adım: Yetkilendirme isteklerini işleme alın

Google, hesap bağlama işlemini başlattığında kullanıcıyı yetkilendirme uç noktanıza yönlendirir. Ayrıntılı protokol sözleşmeleri ve parametre koşulları için Yetkilendirme Uç Noktası'na bakın.

İsteği işlemek için aşağıdaki işlemleri yapın:

  1. İsteği doğrulayın:

    • client_id değerinin Google'a atanan istemci kimliğiyle eşleştiğini onaylayın.
    • redirect_uri değerinin beklenen Google yönlendirme URL'siyle eşleştiğini doğrulayın: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • response_type değerinin token olduğunu doğrulayın.
  2. Kullanıcının kimliğini doğrulayın:

    • Kullanıcının hizmetinizde oturum açıp açmadığını kontrol edin.
    • Kullanıcı oturum açmadıysa oturum açma veya kaydolma akışınızı tamamlamasını isteyin.
  3. Erişim jetonu oluşturma:

    • Kullanıcı ve istemciyle ilişkilendirilmiş, tahmin edilemeyen benzersiz bir erişim jetonu oluşturun.
  4. Google'a geri yönlendirme:

    • Tarayıcıyı redirect_uri içinde sağlanan URL'ye yönlendirin.
    • URL parçasına (karma) aşağıdaki parametreleri ekleyin:
      • access_token: Oluşturduğunuz erişim jetonu.
      • token_type: bearer olmalıdır.
      • state: Google'dan alınan değiştirilmemiş durum değeri.
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.