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.

In the implicit code flow, Google opens your authorization endpoint in the user's browser. After successful sign in, you return a long-lived access token to Google. This access token is now included in every request sent from the Assistant to your Action.

In the authorization code flow, you need two endpoints:

  • The authorization endpoint, which is responsible for presenting the sign-in UI to your users that aren't already signed in and recording consent to the requested access in the form of a short-lived authorization code.
  • The token exchange endpoint, which is responsible for two types of exchanges:
    1. Exchanges an authorization code for a long-lived refresh token and a short-lived access token. This exchange happens when the user goes through the account linking flow.
    2. Exchanges a long-lived refresh token for a short-lived access token. This exchange happens when Google needs a new access token because the one it had expired.

Although the implicit code flow is simpler to implement, Google recommends that access tokens issued using the implicit flow never expire, because using token expiration with the implicit flow forces the user to link their account again. If you need token expiration for security reasons, you should strongly consider using the auth code flow instead.

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

OAuth 2.0 örtülü 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.

İşleminizin, hizmetinizin yetkili API'lerinden birini çağırması gerektiğinde Google, API'leri kendi cihazlarında çağırmak için bu uç noktayı anlamına gelir.

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 erişim için izin verir izin vermedilerse verilerini API'nizle birlikte göndermelerini isteyin.
  2. Hizmetiniz bir erişim jetonu oluşturur ve bu jetonu Kullanıcının tarayıcısını erişim jetonuyla tekrar Google'a yönlendirerek Google ekleyebilirsiniz.
  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

İşleminizin OAuth 2.0 örtülü akışı üzerinden hesap bağlama yapması gerektiğinde Google, kullanıcıyı yetkilendirme uç noktanıza şunu içeren bir istekle gönderir: şu parametrelere sahip olursunuz:

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.

Örneğin, yetkilendirme uç noktanız https://myservice.example.com/auth üzerinde mevcutsa, talep şu şekilde 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şlemesi için aşağıdaki adımları uygulayın:

  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
      YOUR_PROJECT_ID, Proje ayarları sayfasında bulunan kimliktir bölümünü içerir.
  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 onay verir state değerinin değişmediğinden emin olun. Google, erişim jetonunuz varsa Google, jetonu sonraki çağrılara ekler AppRequest'in bir parçası olarak İşleminize ekleyin.

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.