OAuth ile hesap bağlama

OAuth bağlama türü, sektör standardı olan iki OAuth 2.0 akışını (örtük ve yetkilendirme kod akışı) destekler.

Dolaylı kod akışında 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 ömürlü bir erişim jetonu döndürürsünüz. Bu erişim jetonu artık Asistan'dan Action'ınıza gönderilen her isteğe dahil edilir.

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

  • Oturum açma kullanıcı arayüzünü henüz oturum açmamış kullanıcılara sunmaktan ve istenen erişime kısa süreli bir yetkilendirme kodu biçiminde izin kaydetmekten sorumlu olan yetkilendirme uç noktası.
  • İki tür exchange'den sorumlu olan jeton değişimi uç noktası:
    1. Yetkilendirme kodunu uzun ömürlü yenileme jetonu ve kısa ömürlü erişim jetonu ile değiştirir. Bu değişim, kullanıcı hesap bağlama akışından geçer.
    2. Kısa ömürlü bir erişim jetonu için uzun süreli yenileme jetonunu değiştirir. Bu exchange, Google'ın süresi dolmuş olduğundan yeni bir erişim jetonuna ihtiyacı olduğunda gerçekleşir.

Örtülü akış kullanılarak verilen erişim jetonlarının geçerlilik süresinin hiçbir zaman dolmaması, Google'ın örtülü akışla kullanılması nedeniyle kullanıcının hesabını tekrar bağlamayı zorunlu kıldığı için Google, örtülü akış akışının uygulanmasını önerir. Güvenlik nedeniyle jetonun süresinin dolması gerekiyorsa kimlik doğrulama kodu akışını kullanmanız önerilir.

OAuth hesap bağlamayı uygulayın

Projeyi yapılandırma

Projenizi OAuth bağlantısını kullanacak şekilde yapılandırmak için aşağıdaki adımları uygulayın:

  1. Actions Console'u açın ve kullanmak istediğiniz projeyi seçin.
  2. Geliştirme sekmesini tıklayın ve Hesap bağlama'yı seçin.
  3. Hesap bağlama'nın yanındaki anahtarı etkinleştirin.
  4. Hesap oluşturma bölümünde Hayır, yalnızca web sitemde hesap oluşturulmasına izin vermek istiyorum'u seçin.

  5. Bağlantı türü bölümünde OAuth ve Dolaylı'yı seçin.

  6. Müşteri Bilgileri bölümünde:

    • Google'dan gelen istekleri tanımlamak için Actions to Google'a (İşlemleriniz tarafından Google'a gönderilen) bir değer atayın.
    • Yetkilendirme ve Jeton Değişimi uç noktalarınızın URL'lerini ekleyin.
  1. Kaydet'i tıklayın.

OAuth sunucunuzu uygulama

Hizmetiniz OAuth 2.0 dolaylı akışını desteklemek için HTTPS tarafından kullanılabilen bir yetkilendirme uç noktası sunar. Bu uç nokta, veri erişimi için kullanıcıların kimliğini doğrulamak ve kullanıcılardan izin almaktan sorumludur. Yetkilendirme uç noktası, henüz oturum açmamış olan kullanıcılarınıza bir oturum açma kullanıcı arayüzü sunar ve istenen erişim için izni kaydeder.

İşleminizin, hizmetinizin yetkili API'lerinden birini çağırması gerektiğinde Google, kullanıcılarınızın kendi adlarına bu API'leri çağırmasına izin vermek için bu uç noktayı kullanır.

Google tarafından başlatılan tipik bir OAuth 2.0 dolaylı akış oturumu aşağıdaki akışa sahiptir:

  1. Google, kullanıcının tarayıcısında yetkilendirme uç noktanızı açar. Kullanıcı daha önce oturum açmadıysa oturum açar ve henüz izin vermemişse Google'ın API'nizle verilerine erişmesine izin verir.
  2. Hizmetiniz bir erişim jetonu oluşturur ve kullanıcının tarayıcısını isteğe eklenmiş erişim jetonuyla tekrar Google'a yönlendirerek bu jetonu Google'a gönderir.
  3. Google, hizmetinizin API'lerini çağırır ve erişim jetonunu her isteğe 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.

Yetkilendirme isteklerini işleme

İşleminizin hesap bağlama işlemini OAuth 2.0 dolaylı akışı üzerinden gerçekleştirmesi gerektiğinde Google, kullanıcıyı aşağıdaki parametreleri içeren bir istekle yetkilendirme uç noktanıza gönderir:

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'sında değiştirilmeden Google'a geri aktarılan defter değeri.
response_type Yanıtta döndürülecek değerin türü. OAuth 2.0 dolaylı akışı için yanıt türü her zaman token şeklindedir.

Örneğin, yetkilendirme uç noktanız https://myservice.example.com/auth adresinde bulunuyorsa 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

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

  1. İstenmeyen veya yanlış yapılandırılmış istemci uygulamalarına erişim izni verilmesini önlemek için client_id ve redirect_uri değerlerini doğrulayın:

    • client_id öğesinin Google'a atadığınız istemci kimliğiyle eşleştiğini doğrulayın.
    • redirect_uri parametresi tarafından belirtilen URL'nin aşağıdaki biçimde olduğunu onaylayın:
      https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
      YOUR_PROJECT_ID, Actions Console'un Proje ayarları sayfasında bulunan kimliktir.
  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 kullanacağı bir erişim jetonu oluşturun. Erişim jetonu herhangi bir dize değeri olabilir ancak kullanıcıyı ve jetonun ait olduğu istemciyi benzersiz şekilde temsil etmeli ve tahmin edilebilir olmamalıdır.

  4. Kullanıcının tarayıcısını redirect_uri parametresiyle belirtilen URL'ye yönlendiren bir HTTP yanıtı gönderin. Aşağıdaki parametrelerin tümünü URL parçasına ekleyin:

    • access_token: az önce oluşturduğunuz erişim jetonu
    • token_type: bearer dizesi
    • state: Orijinal istekteki değiştirilmemiş durum değeri Aşağıda, elde edilen URL örneği 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ğini onaylar. Google, hizmetiniz için bir erişim jetonu aldıktan sonra bu jetonu AppRequest'in parçası olarak sonraki İşleminize yapılan çağrılara ekler.

Kimlik doğrulama akışı için ses kullanıcı arayüzünü tasarlama

Kullanıcının doğrulanıp doğrulanmadığını kontrol etme ve hesap bağlama akışını başlatma

  1. Actions Console'da Actions Builder projenizi açın.
  2. İşleminizde hesap bağlamayı başlatmak için yeni bir sahne oluşturun:
    1. Sahneler'i tıklayın.
    2. Yeni bir sahne eklemek için ekle (+) simgesini tıklayın.
  3. Yeni oluşturulan sahnede Koşullar için ekle simgesini tıklayın.
  4. Görüşmeyle ilişkilendirilen kullanıcının doğrulanmış bir kullanıcı olup olmadığını kontrol eden bir koşul ekleyin. Kontrol başarısız olursa İşleminiz görüşme sırasında hesap bağlama işlemi gerçekleştiremez ve hesap bağlamayı gerektirmeyen işlevlere erişim sağlamaya devam etmelidir.
    1. Koşul bölümündeki Enter new expression alanına aşağıdaki mantığı girin: user.verificationStatus != "VERIFIED"
    2. Geçiş bölümünde, hesap bağlama gerektirmeyen bir düzen veya yalnızca konuklara özel işleve giriş noktası olan bir düzen seçin.

  1. Koşullar için ekle simgesini tıklayın.
  2. Kullanıcının ilişkili bir kimliği yoksa hesap bağlama akışını tetiklemek için bir koşul ekleyin.
    1. Koşul bölümündeki Enter new expression alanına aşağıdaki mantığı girin: user.verificationStatus == "VERIFIED"
    2. Geçiş bölümünde, Hesap Bağlama sistem sahnesini seçin.
    3. Kaydet'i tıklayın.

Kaydettikten sonra projenize <SceneName>_AccountLinking adlı yeni bir hesap bağlama sistemi düzeni eklenir.

Hesap bağlama sahnesini özelleştirin

  1. Sahneler bölümünde, hesap bağlama sistemi sahnesini seçin.
  2. İstem gönder'i tıklayın ve işlemin neden kimliğine erişmesi gerektiğini kullanıcıya açıklamak için kısa bir cümle ekleyin (örneğin, "Tercihlerinizi kaydetmek için").
  3. Kaydet'i tıklayın.

  1. Koşullar bölümünde, Kullanıcı hesap bağlamayı başarıyla tamamlarsa'yı tıklayın.
  2. Kullanıcı, hesabını bağlamayı kabul ederse akışın nasıl devam edeceğini yapılandırın. Örneğin, gerekli olan özel iş mantığını işlemesi ve kaynak sahneye geri dönmesi için webhook'u çağırın.
  3. Kaydet'i tıklayın.

  1. Koşullar bölümünde, Kullanıcı hesap bağlamayı iptal eder veya reddederse'yi tıklayın.
  2. Kullanıcı, hesabını bağlamayı kabul etmezse akışın nasıl devam edeceğini yapılandırın. Örneğin, onaylama mesajı gönderin ve kullanıcıları, hesap bağlamayı gerektirmeyen işlevler sunan sahnelere yönlendirin.
  3. Kaydet'i tıklayın.

  1. Koşullar bölümünde, Sistem veya ağ hatası oluşursa'yı tıklayın.
  2. Hesap bağlama akışı sistem veya ağ hataları nedeniyle tamamlanamıyorsa akışın nasıl devam edeceğini yapılandırın. Örneğin, onaylama mesajı gönderin ve kullanıcıları, hesap bağlamayı gerektirmeyen işlevler sunan sahnelere yönlendirin.
  3. Kaydet'i tıklayın.

Veri erişim isteklerini işleme

Asistan isteği erişim jetonu içeriyorsa öncelikle erişim jetonunun geçerli olduğundan (ve süresinin dolmamış olduğundan) emin olun, ardından veritabanınızdan ilişkili kullanıcı hesabını alın.