Her Cloud-to-cloud entegrasyonu, kullanıcıların kimliğini doğrulama mekanizması içermelidir.
Kimlik doğrulama, kullanıcılarınızın Google hesaplarını kimlik doğrulama sisteminizdeki kullanıcı hesaplarına bağlamanıza olanak tanır. Bu sayede, yerine getirme işleminiz akıllı ev amacı aldığında kullanıcılarınızı tanımlayabilirsiniz. Google akıllı ev, yalnızca yetkilendirme kodu akışı olan OAuth'u destekler.
Bu sayfada, OAuth 2.0 sunucunuzu Cloud-to-cloud entegrasyonunuzla çalışacak şekilde nasıl ayarlayacağınız açıklanmaktadır.
OAuth ile Google Hesabı Bağlama
Yetkilendirme kodu akışında iki uç noktaya ihtiyacınız vardır:
Oturum açmamış kullanıcılarınıza oturum açma kullanıcı arayüzünü sunan authorization uç noktası. Yetkilendirme uç noktası, kullanıcıların istenen erişime verdiği izni kaydetmek için kısa süreli bir yetkilendirme kodu da oluşturur.
İki tür değişimden sorumlu olan jeton değişimi uç noktası:
- Yetkilendirme kodunu uzun ömürlü bir yenileme jetonu ve kısa ömürlü bir erişim jetonuyla değiştirir. Bu değişim, kullanıcı hesap bağlama akışında ilerlerken gerçekleşir.
- Uzun ömürlü yenileme jetonunu kısa ömürlü erişim jetonuyla değiştirir. Bu değişim, Google'ın süresi dolmuş olan erişim jetonu yerine yeni bir erişim jetonuna ihtiyaç duyduğunda gerçekleşir.
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 şartları ve öneriler açıklanmaktadır. Google'ın uygulaması tarafından çağrıldıktan sonra platformunuz kullanıcıya Google'da oturum açma sayfası ve hesap bağlama izni ekranı gösterir. Kullanıcı, hesapları bağlama izni verdikten sonra Google'ın uygulamasına geri yönlendirilir.

Şartlar
- 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.
- "Oturum açarak Google'a cihazlarınızı kontrol etme yetkisi vermiş olursunuz." gibi bir Google yetkilendirme beyanınız olmalıdır. Google Home Geliştirici Politikaları'nın Google Cihaz Kontrol Yetkilendirmesi bölümüne bakın.
- Web OAuth bağlantı sayfasını açmanız ve kullanıcıların Google Hesaplarında oturum açmak için net bir yönteme (ör. kullanıcı adı ve şifre alanları) sahip olduğundan emin olmanız gerekir. Kullanıcıların Web OAuth Bağlantı sayfasına yönlendirilmeden bağlantı oluşturmasını sağlayan Google ile oturum açma (GSI) yöntemini kullanmayın. Bu durum Google politikasını ihlal eder.
Öneriler
Aşağıdakileri yapmanızı öneririz:
Google'ın Gizlilik Politikası'nı gösterin. Kullanıcı rızası ekranına Google'ın Gizlilik Politikası'nın bağlantısını ekleyin.
Paylaşılacak veriler. Google'ın kullanıcının hangi verilerini neden gerekli kıldığını net ve kısa bir dille açıklayın.
Net bir harekete geçirici mesaj Kullanıcıların hesaplarını bağlamak için Google ile hangi verileri paylaşmaları gerektiğini anlamaları gerektiğinden, izin ekranınızda "Kabul et ve bağla" gibi net bir harekete geçirici mesaj belirtin.
İptal etme imkanı Kullanıcıların, bağlantı oluşturmayı tercih etmemeleri durumunda geri dönmeleri veya işlemi iptal etmeleri için bir yöntem sağlayın.
Net oturum açma süreci. Kullanıcıların Google Hesaplarında oturum açmak için net bir yönteme (ör. kullanıcı adı ve şifre alanları veya Google ile oturum açma) sahip olduğundan emin olun.
Bağlantıyı kaldırma imkanı Kullanıcıların bağlantıyı kaldırabilecekleri bir mekanizma (ör. platformunuzdaki hesap ayarlarının URL'si) sunun. Alternatif olarak, kullanıcıların bağlı hesaplarını yönetebilecekleri Google Hesabı bağlantısı da ekleyebilirsiniz.
Kullanıcı hesabını değiştirme olanağı 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 yararlıdır.
- Kullanıcının hesap değiştirmek için izin ekranını kapatması gerekiyorsa kullanıcının OAuth bağlama özelliğiyle istediği hesapta oturum açabilmesi için Google'a kurtarılabilir bir hata gönderin.
Logonuzu ekleyin. İzin ekranında şirket logonuzu gösterin. Logonuzu yerleştirmek için stil yönergelerinizi kullanın. Google'ın logosunu da göstermek istiyorsanız Logolar ve ticari markalar başlıklı makaleyi inceleyin.

Yetkilendirme kodu akışı
Yetkilendirme kodu akışının OAuth 2.0 sunucu uygulaması, hizmetinizin HTTPS üzerinden kullanılabilir hale getirdiği iki uç noktadan oluşur. İlk uç nokta, yetkilendirme uç noktasıdır. Bu uç nokta, veri erişimi için kullanıcılardan izin bulmaktan veya izin almaktan 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. İkinci uç nokta, jeton değişimi uç noktasıdır. Bu uç nokta, kullanıcıya hizmetinize erişme yetkisi veren jeton adı verilen şifrelenmiş dizeleri almak için kullanılır.
Bir Google uygulamasının hizmetinizin API'lerinden birini çağırması gerektiğinde Google, kullanıcılarınızdan bu API'leri onlar adına çağırmak için izin almak üzere bu uç noktaları birlikte kullanır.
Google tarafından başlatılan bir OAuth 2.0 yetkilendirme kodu akışı oturumu aşağıdaki akışa sahiptir:
- Google, yetkilendirme uç noktanızı kullanıcının tarayıcısında açar. İşlem için akış yalnızca sesli cihazda başlatıldıysa Google, yürütmeyi telefona aktarır.
- Kullanıcı, henüz oturum açmadıysa oturum açar ve Google'a, daha önce izin vermediyse API'nizle verilerine erişme izni verir.
- Hizmetiniz bir yetkilendirme kodu oluşturur ve bunu Google'a döndürür. Bunu yapmak için kullanıcının tarayıcısını, isteğe eklenmiş yetkilendirme koduyla birlikte Google'a geri yönlendirin.
- Google, yetkilendirme kodunu jeton değişimi uç noktanıza gönderir. Bu uç nokta, kodun gerçekliğini doğrulayıp bir erişim jetonu ve bir yenileme jetonu döndürür. Erişim jetonu, hizmetinizin API'lere erişmek için kimlik bilgisi olarak kabul ettiği kısa ömürlü bir jetondur. Yenileme jetonu, Google'ın saklayabileceği ve erişim jetonlarının süresi dolduğunda yeni erişim jetonları almak için kullanabileceği uzun ömürlü bir jetondur.
- Kullanıcı, hesap bağlama akışını tamamladıktan sonra Google'dan gönderilen her istekte bir erişim jetonu bulunur.
Yetkilendirme isteklerini işleme
OAuth 2.0 yetkilendirme kodu akışını kullanarak hesap bağlama işlemini gerçekleştirmeniz gerektiğinde Google, kullanıcıyı yetkilendirme uç noktanıza aşağıdaki parametreleri içeren bir istekle yönlendirir:
Yetkilendirme uç noktası parametreleri | |
---|---|
client_id |
Google'a atadığınız müşteri kimliği. |
redirect_uri |
Bu isteğe verilen yanıtı göndereceğiniz URL. |
state |
Yönlendirme URI'sinde Google'a değiştirilmeden geri aktarılan bir muhasebe değeri. |
scope |
İsteğe bağlı: Google'ın yetkilendirme isteğinde bulunduğu verileri belirten, boşlukla ayrılmış bir kapsam dizeleri grubu. |
response_type |
Yanıt içinde döndürülecek değerin türü. OAuth 2.0 yetkilendirme kodu akışı için yanıt türü her zaman code olur.
|
Örneğin, yetkilendirme uç noktanız https://myservice.example.com/auth
adresinde kullanılabiliyorsa istek şu şekilde görünebilir:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code
Yetkilendirme uç noktanızın oturum açma isteklerini işlemesi için aşağıdaki adımları uygulayın:
client_id
değerinin Google'a atadığınız istemci kimliğiyle,redirect_uri
değerinin ise Google tarafından hizmetiniz için sağlanan yönlendirme URL'siyle eşleştiğini doğrulayın. Bu kontroller, amaçlanmayan veya yanlış yapılandırılmış istemci uygulamalarına erişim verilmesini önlemek için önemlidir. Birden fazla OAuth 2.0 akışını destekliyorsanızresponse_type
değerinincode
olduğunu da onaylayın.- 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.
- Google'ın API'nize erişmek için kullanacağı bir yetkilendirme kodu oluşturun. Yetkilendirme kodu herhangi bir dize değeri olabilir ancak kullanıcıyı, jetonun ait olduğu istemciyi ve kodun geçerlilik bitiş zamanını benzersiz bir şekilde temsil etmeli ve tahmin edilebilir olmamalıdır. Genellikle yaklaşık 10 dakika sonra geçerliliğini yitiren yetkilendirme kodları veriyorsunuz.
redirect_uri
parametresiyle belirtilen URL'nin aşağıdaki biçimde olduğunu doğrulayın:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Kullanıcının tarayıcısını
redirect_uri
parametresiyle belirtilen URL'ye yönlendirin.code
vestate
parametrelerini ekleyerek yönlendirme yaptığınızda, yeni oluşturduğunuz yetkilendirme kodunu ve orijinal, değiştirilmemiş durum değerini ekleyin. Aşağıda, sonuç URL'sine dair bir örnek verilmiştir:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Jeton değişimi isteklerini işleme
Hizmetinizin jeton değişimi uç noktası iki tür jeton değişiminden sorumludur:
- Erişim jetonları ve yenileme jetonları için yetkilendirme kodlarını değiştirme
- Yenileme jetonlarını erişim jetonlarıyla değiştirme
Jeton değişimi istekleri aşağıdaki parametreleri içerir:
Jeton değişimi uç nokta parametreleri | |
---|---|
client_id |
İstek kaynağını Google olarak tanımlayan bir dize. Bu dize, sisteminizde Google'ın benzersiz tanımlayıcısı olarak kaydedilmelidir. |
client_secret |
Hizmetiniz için Google'a kaydettirdiğiniz gizli dize. |
grant_type |
Değiştirilen jetonun türü. authorization_code veya refresh_token olmalıdır. |
code |
grant_type=authorization_code olduğunda bu parametre, Google'ın oturum açma veya jeton değişimi uç noktanızdan aldığı koddur. |
redirect_uri |
grant_type=authorization_code olduğunda bu parametre, ilk yetkilendirme isteğinde kullanılan URL'dir. |
refresh_token |
grant_type=refresh_token olduğunda bu parametre, Google'ın jeton değişimi uç noktanızdan aldığı yenileme jetonudur. |
Google'ın sunucunuza kimlik bilgilerini nasıl göndereceğini yapılandırma
Yetkilendirme sunucunuz, uygulanma şekline bağlı olarak istemci kimlik bilgilerini istek gövdesinde veya istek başlığında almayı bekler.
Google, kimlik bilgilerini varsayılan olarak istek gövdesinde gönderir. Yetkilendirme sunucunuzun, istemci kimlik bilgilerinin istek üstbilgisinde olmasını gerektiriyorsa Cloud-to-cloud entegrasyonunuzu buna göre yapılandırmanız gerekir:
Proje listesinde, üzerinde çalışmak istediğiniz projenin yanındaki Aç'ı tıklayın.
Cloud-to-Cloud bölümünde Develop'u (Geliştir) seçin.
Entegrasyonunuzun yanındaki Aç'ı tıklayın.
İzinler (isteğe bağlı) bölümüne gidin ve Google, istemci kimliğini ve gizliyi HTTP temel kimlik doğrulama üstbilgisi üzerinden iletsin onay kutusunu işaretleyin.
Değişikliklerinizi kaydetmek için Kaydet'i tıklayın.
Erişim jetonları ve yenileme jetonları için yetkilendirme kodlarını değiştirme
Kullanıcı oturum açtıktan ve yetkilendirme uç noktanız Google'a kısa ömürlü bir yetkilendirme kodu döndürdükten sonra Google, yetkilendirme kodunu erişim jetonu ve yenileme jetonuyla değiştirmek için jeton değişimi uç noktanıza bir istek gönderir.
Bu isteklerde grant_type
değeri authorization_code
, code
değeri ise daha önce Google'a verdiğiniz yetkilendirme kodunun değeridir. Aşağıda, yetkilendirme kodunu erişim jetonu ve yenileme jetonuyla değiştirme isteğine ilişkin bir örnek verilmiştir:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
Yetkilendirme kodlarını erişim jetonu ve yenileme jetonuyla değiştirmek için jeton değişimi uç noktanız, aşağıdaki adımları uygulayarak POST
isteklerine yanıt verir:
client_id
değerinin, isteğin kaynağını yetkili bir kaynak olarak tanımladığını veclient_secret
değerinin beklenen değerle eşleştiğini doğrulayın.- Yetkilendirme kodunun geçerli ve süresinin dolmadığını, ayrıca istekte belirtilen istemci kimliğinin yetkilendirme koduyla ilişkili istemci kimliğiyle eşleştiğini doğrulayın.
redirect_uri
parametresiyle belirtilen URL'nin, ilk yetkilendirme isteğinde kullanılan değerle aynı olduğunu doğrulayın.- Yukarıdaki ölçütlerin tümünü doğrulayamıyorsanız gövde olarak
{"error": "invalid_grant"}
ile bir HTTP 400 Bad Request hatası döndürün. - Aksi takdirde, yenileme jetonu ve erişim jetonu oluşturmak için yetkilendirme kodundaki kullanıcı kimliğini kullanın. Bu jetonlar herhangi bir dize değeri olabilir ancak jetonun ait olduğu kullanıcıyı ve istemciyi benzersiz şekilde temsil etmeli ve tahmin edilebilir olmamalıdır. Erişim jetonları için jetonun geçerlilik bitiş zamanını da kaydedin. Bu süre genellikle jetonu yayınladıktan bir saat sonra sona erer. Yenileme jetonlarının süresi dolmaz.
- HTTPS yanıtının gövdesinde aşağıdaki JSON nesnesini döndürün:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Google, kullanıcının erişim jetonunu ve yenileme jetonunu saklar ve erişim jetonunun geçerlilik bitimini kaydeder. Erişim jetonunun süresi dolduğunda Google, jeton değişimi uç noktanızdan yeni bir erişim jetonu almak için yenileme jetonunu kullanır.
Yenileme jetonlarını erişim jetonlarıyla değiştirme
Erişim jetonunun süresi dolduğunda Google, yenileme jetonunu yeni bir erişim jetonuyla değiştirmek için jeton değişimi uç noktanıza bir istek gönderir.
Bu isteklerde grant_type
değeri refresh_token
, refresh_token
değeri ise daha önce Google'a verdiğiniz yenileme jetonunun değeridir. Aşağıda, yenileme jetonunu erişim jetonuyla değiştirme isteğine dair bir örnek verilmiştir:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Yenileme jetonunu erişim jetonuyla değiştirmek için jeton değişimi uç noktanız, POST
isteklerine aşağıdaki adımları uygulayarak yanıt verir:
client_id
parametresinin istek kaynağını Google olarak tanımladığını veclient_secret
parametresinin beklenen değerle eşleştiğini doğrulayın.- Yenileme jetonunun geçerli olduğunu ve istekte belirtilen istemci kimliğinin, yenileme jetonuyla ilişkilendirilen istemci kimliğiyle eşleştiğini doğrulayın.
- Yukarıdaki tüm ölçütleri doğrulayamıyorsanız gövde olarak
{"error": "invalid_grant"}
ile bir HTTP 400 Kötü İstek hatası döndürün. - Aksi takdirde, erişim jetonu oluşturmak için yeni jetonun kullanıcı kimliğini kullanın. Bu jetonlar herhangi bir dize değeri olabilir ancak jetonun ait olduğu kullanıcıyı ve istemciyi benzersiz şekilde temsil etmeli ve tahmin edilebilir olmamalıdır. Erişim jetonları için jetonun geçerlilik bitiş süresini de kaydedin. Bu süre genellikle jetonu yayınladıktan bir saat sonra sona erer.
- HTTPS yanıtının gövdesinde aşağıdaki JSON nesnesini döndürün:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
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:
- Google One Tap ile Bağlı Hesapta Oturum Açma.
- AndroidTV'de sorunsuz abonelik.
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:
- Yetkilendirme başlığından erişim jetonunu çıkarın ve erişim jetonuyla ilişkilendirilmiş kullanıcının bilgilerini döndürün.
- 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. 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.