OAuth bağlama türü, iki endüstri standardı OAuth 2.0 akışını destekler: dolaylı ve yetkilendirme kod akışları.
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ı:
- 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.
- 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 hesabı bağlamayı uygula
Projeyi yapılandırma
Projenizi OAuth bağlantısı kullanacak şekilde yapılandırmak için aşağıdaki adımları uygulayın:
- Actions Console'u açıp kullanmak istediğiniz projeyi seçin.
- Geliştirme sekmesini tıklayın ve Hesap bağlama'yı seçin.
- Hesap bağlama seçeneğinin yanındaki anahtarı etkinleştirin.
- Hesap oluşturma bölümünde Hayır, yalnızca web sitemde hesap oluşturmaya izin vermek istiyorum'u seçin.
Bağlantı türü bölümünde OAuth ve Dolaylı'yı seçin.
İstemci Bilgileri bölümünde:
- Google'dan gelen istekleri tanımlamak için Actions by Google tarafından verilen İstemci Kimliği'ne değer atayın.
- Yetkilendirme ve Jeton Exchange uç noktalarınızın URL'lerini ekleyin.
- Kaydet'i tıklayın.
OAuth sunucunuzu Uygulama
OAuth 2.0 dolaylı akışını desteklemek için hizmetiniz, yetkilendirme uç noktasının HTTPS tarafından kullanılmasını sağlar. Bu uç nokta, veri erişimi için kullanıcıların kimliğini doğrulamaktan ve kullanıcılardan izin almaktan sorumludur. Yetkilendirme uç noktası, kullanıcılarınıza henüz oturum açmamış olan bir oturum açma kullanıcı arayüzü sunar ve istenen erişim iznini kaydeder.
İşleminizin hizmetinizin yetkili API'lerinden birini çağırması gerektiğinde Google, kullanıcılarınızdan bu API'leri kendi adlarına çağırmak için bu uç noktayı kullanır.
Google tarafından başlatılan tipik bir OAuth 2.0 dolaylı akış oturumunda aşağıdaki akış geçerlidir:
- Google, yetkilendirme uç noktanızı kullanıcının tarayıcısında açar. Kullanıcı daha önce oturum açmamışsa oturum açar ve henüz izin vermemişse Google'a, API'nizle verilerine erişmesine izin verir.
- Hizmetiniz bir erişim jetonu oluşturur ve kullanıcının tarayıcısını, isteğe eklenmiş erişim jetonuyla Google'a tekrar yönlendirerek Google'a döndürür.
- 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 API çağrısını tamamlar.
Yetkilendirme isteklerini işleme
İşleminizin OAuth 2.0 dolaylı akışı üzerinden hesap bağlama işlemi yapması gerektiğinde Google, aşağıdaki parametreleri içeren bir istekle kullanıcıyı yetkilendirme uç noktasına gönderir:
Yetkilendirme uç noktası parametreleri | |
---|---|
client_id |
Google'a atadığınız istemci kimliği. |
redirect_uri |
Bu isteğe yanıt göndermek için kullandığınız URL. |
state |
Yönlendirme URI'sinde değişmeden Google'a geri verilen bir muhasebe 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 'dir. |
Örneğin, yetkilendirme uç noktanız https://myservice.example.com/auth
adresinde mevcutsa 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
Yetkilendirme uç noktanızın oturum açma isteklerini işlemesi için aşağıdaki adımları uygulayın:
İstenmeyen veya yanlış yapılandırılmış istemci uygulamalarına erişim izni vermemek için
client_id
veredirect_uri
değerlerini doğrulayın:client_id
değerinin Google'a atadığınız istemci kimliğiyle eşleştiğinden emin olun.redirect_uri
parametresi tarafından belirtilen URL'nin aşağıdaki biçimde olduğundan emin olun:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID
YOUR_PROJECT_ID, Actions Console'un Proje ayarları sayfasında bulunan kimliktir.
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.
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 jetonun kullanıcıyı ve istemciyi benzersiz olarak temsil etmesi ve tahmin edilmesi mümkün olmaması gerekir.
Kullanıcının tarayıcısını
redirect_uri
parametresi tarafından belirtilen URL'ye yönlendiren bir HTTP yanıtı gönderin. Aşağıdaki tüm parametreleri URL parçasına ekleyin:access_token
: Az önce oluşturduğunuz erişim jetonutoken_type
:bearer
dizesistate
: Orijinal istekteki değiştirilmemiş durum değeri: Görüntülenen URL aşağıdaki gibi görünür: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, jetonu AppRequest'in bir parçası olarak İşleminize yapılan sonraki çağrılara ekler.
Kimlik doğrulama akışı için sesli kullanıcı arayüzünü tasarlayın
Kullanıcının doğrulanıp doğrulanmadığını kontrol edin ve hesap bağlama akışını başlatın
- Actions Console'da Actions Builder projenizi açın.
- İşleminizde hesap bağlamaya başlamak için yeni bir sahne oluşturun:
- Sahneler'i tıklayın.
- Yeni bir sahne eklemek için ekle (+) simgesini tıklayın.
- Yeni oluşturulan sahnede, Koşullar için ekle add simgesini tıklayın.
- Görüşmeyle ilişkilendirilen kullanıcının doğrulanmış 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ğlantısı gerektirmeyen işlevlere erişim izni vermelidir.
- Koşul'un altındaki
Enter new expression
alanına aşağıdaki mantığı girin:user.verificationStatus != "VERIFIED"
- Geçiş bölümünde, hesap bağlama gerektirmeyen bir sahneyi veya yalnızca konuklara sunulan işlevin giriş noktası olan bir sahne seçin.
- Koşul'un altındaki
- Koşullar için add ekle simgesini tıklayın.
- Kullanıcının ilişkili bir kimliği yoksa hesap bağlama akışını tetiklemek için bir koşul ekleyin.
- Koşul'un altındaki
Enter new expression
alanına aşağıdaki mantığı girin:user.verificationStatus == "VERIFIED"
- Geçiş'in altında Hesap Bağlama sistem sahnesini seçin.
- Kaydet'i tıklayın.
- Koşul'un altındaki
Kaydetme işleminden sonra projenize <SceneName>_AccountLinking
adlı yeni bir hesap bağlama sistemi sahnesi eklenir.
Hesap bağlama sahnesini özelleştirin
- Sahneler'in altında hesap bağlama sistemi sahnesini seçin.
- İstem gönder'i tıklayın ve kullanıcıya İşlem'in kimliğine neden erişmesi gerektiğini açıklayan kısa bir cümle ekleyin (örneğin, "Tercihlerinizi kaydetmek için").
- Kaydet'i tıklayın.
- Koşullar bölümünde, Kullanıcı, hesap bağlama işlemini başarıyla tamamlarsa'yı tıklayın.
- Kullanıcı hesabını bağlamayı kabul ederse akışın nasıl devam etmesi gerektiğini yapılandırın. Örneğin, gerekli tüm özel iş mantığını işlemek ve kaynak sahneye geri dönmek için webhook'u çağırın.
- Kaydet'i tıklayın.
- Koşullar bölümünde, Kullanıcı, hesap bağlama işlemini iptal eder veya reddederse'yi tıklayın.
- Kullanıcı, hesabını bağlamayı kabul etmezse akışın nasıl ilerleyeceğini yapılandırın. Örneğin, onay mesajı gönderin ve hesap bağlama gerektirmeyen işlevler sunan sahnelere yönlendirin.
- Kaydet'i tıklayın.
- Koşullar bölümünde, Sistem veya ağ hatası oluşursa'yı tıklayın.
- Hesap bağlama akışı, sistem veya ağ hataları nedeniyle tamamlanamıyorsa akışın nasıl ilerleyeceğini yapılandırın. Örneğin, onay mesajı gönderin ve hesap bağlama gerektirmeyen işlevler sunan sahnelere yönlendirin.
- Kaydet'i tıklayın.
Veri erişim isteklerini işleme
Asistan isteği bir erişim jetonu içeriyorsa önce erişim jetonunun geçerli olduğundan (ve süresinin dolmadığından) emin olun ve ardından ilişkili kullanıcı hesabını veritabanınızdan alın.