Kullanıcıların, internete bağlı TV'ler gibi sınırlı giriş özelliklerine sahip cihazlarda Google Hesaplarıyla uygulamanızda oturum açmasına izin verebilirsiniz.
Uygulama, kullanıcıya kısa bir kod ve oturum açma URL'si gösterir. Ardından kullanıcı, oturum açma URL'sini bir web tarayıcısında açar, kodu girer ve uygulamaya kullanıcının oturum açma bilgilerine erişme izni verir. Son olarak uygulama onay alır ve kullanıcının oturumu açılır.
Bu oturum açma akışını kullanmak için uygulamanın aşağıdaki ölçütleri karşılayan bir cihazda çalıştırılması gerekir:
- Cihaz, kullanıcıya yönelik talimatlarla birlikte 40 karakterli URL, 15 karakterli kullanıcı kodu gösterebilmelidir.
- Cihaz internete bağlı olmalıdır.
İstemci kimliği ve istemci gizli anahtarı alma
Uygulamanızın, Google'ın oturum açma uç noktalarına istek gönderebilmesi için OAuth 2.0 istemci kimliğine ve istemci gizli anahtarına ihtiyacı vardır.
Projenizin istemci kimliğini ve istemci gizli anahtarını bulmak için aşağıdakileri yapın:
- Mevcut bir OAuth 2.0 kimlik bilgisini seçin veya Kimlik bilgileri sayfasını açın.
- Henüz yapmadıysanız Kimlik bilgileri oluştur > OAuth istemci kimliği seçeneğini tıklayıp kimlik bilgilerini oluşturmak için gereken bilgileri sağlayarak projenizin OAuth 2.0 kimlik bilgilerini oluşturun.
- OAuth 2.0 istemci kimlikleri bölümünde İstemci Kimliği'ni bulun. Ayrıntılar için istemci kimliğini tıklayın.
Yeni bir istemci kimliği oluşturuyorsanız TV'ler ve Sınırlı Giriş cihazları uygulama türünü seçin.
Kullanıcı kodu ve doğrulama URL'si edinme
Bir kullanıcı, Google Hesabı kullanarak oturum açma isteğinde bulunduğunda, OAuth 2.0 cihaz uç noktasına (https://oauth2.googleapis.com/device/code
) HTTP POST isteği göndererek bir kullanıcı kodu ve doğrulama URL'si edinirsiniz. İstemci kimliğinizi ve istekle birlikte ihtiyaç duyduğunuz kapsamların listesini ekleyin. Kullanıcıların yalnızca Google Hesaplarıyla oturum açmasını istiyorsanız yalnızca profile
ve email
kapsamlarını isteyin veya kullanıcılar adına desteklenen bir API'yi çağırma izni talep etmek istiyorsanız profile
ve email
kapsamlarına ek olarak gerekli kapsamları da isteyin.
Aşağıda, kullanıcı kodu için örnek bir istek gösterilmektedir:
POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_GOOGLE_CLIENT_ID&scope=email%20profile
curl
kullanılıyor:
curl -d "client_id=YOUR_GOOGLE_CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code
Yanıt, JSON nesnesi olarak döndürülür:
{
"device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
"user_code" : "GQVQ-JKEC",
"verification_url" : "https://www.google.com/device",
"expires_in" : 1800,
"interval" : 5
}
Uygulamanız, user_code
ve verification_url
değerlerini kullanıcıya gösterir ve aynı zamanda kullanıcı oturum açana veya expires_in
tarafından belirtilen süre geçene kadar oturum açma uç noktasını belirtilen interval
zaman aralığında sorgulamaya devam eder.
Kullanıcı kodunu ve doğrulama URL'sini görüntüleme
Cihaz uç noktasından bir kullanıcı kodu ve doğrulama URL'si aldıktan sonra bunları gösterin ve kullanıcıya URL'yi açıp kullanıcı kodunu girmesini söyleyin.
verification_url
ve user_code
değerleri değişebilir. Kullanıcı arayüzünüzü aşağıdaki sınırlara uygun olacak şekilde tasarlayın:
user_code
, 15W
boyutunda karakteri barındıracak kadar geniş bir alanda gösterilmelidir.verification_url
, 40 karakter uzunluğunda bir URL dizesini işleyebilecek kadar geniş bir alanda gösterilmelidir.
Her iki dize de US-ASCII karakter kümesindeki yazdırılabilir herhangi bir karakteri içerebilir.
Gelecekte kodun biçimi değişirse uygulamanız bozulabileceğinden, user_code
dizesini görüntülerken dizeyi hiçbir şekilde değiştirmeyin (ör. büyük/küçük harfleri değiştirme veya başka biçimlendirme karakterleri ekleme).
İsterseniz görüntüleme amacıyla URL'den şemayı kaldırarak verification_url
dizesini değiştirebilirsiniz. Bu durumda, uygulamanızın hem "http" hem de "https" varyantlarını işleyebildiğinden emin olun. verification_url
dizesini başka bir şekilde değiştirmeyin.
Kullanıcı doğrulama URL'sine gittiğinde aşağıdakine benzer bir sayfa görür:
Kullanıcı, kullanıcı kodunu girdikten sonra Google oturum açma sitesi aşağıdakine benzer bir izin ekranı gösterir:
Kullanıcı İzin ver'i tıklarsa uygulamanız kullanıcıyı tanımlamak için bir kimlik jetonu, Google API'lerini çağırmak için bir erişim jetonu ve yeni jetonlar almak için bir yenileme jetonu alabilir.
Kimlik jetonu ve yenileme jetonu alma
Uygulamanızda kullanıcı kodu ve doğrulama URL'si gösterildikten sonra, jeton uç noktasını (https://oauth2.googleapis.com/token
) cihaz uç noktasından aldığınız cihaz koduyla yoklamaya başlayın. interval
değeriyle belirtilen aralıkta jeton uç noktasını saniye cinsinden yoklayın.
Aşağıda örnek bir istek verilmiştir:
POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_GOOGLE_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0
curl
kullanılıyor:
curl -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=YOUR_DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token
Kullanıcı isteği henüz onaylamamışsa yanıt şu şekilde olur:
{
"error" : "authorization_pending"
}
Uygulamanız bu istekleri interval
değerini aşmayacak bir hızda tekrarlamalıdır. Uygulamanız çok hızlı anket yapıyorsa yanıt şu şekildedir:
{
"error" : "slow_down"
}
Kullanıcı oturum açıp uygulamanızın istediğiniz kapsamlara erişmesine izin verdiğinde uygulamanızın bir sonraki isteğinin yanıtı bir kimlik jetonu, erişim jetonu ve bir yenileme jetonu içerir:
{
"access_token": "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
"id_token": "eyJhbGciOiJSUzI..."
}
Bu yanıtı aldıktan sonra uygulamanız, oturum açmış kullanıcıyla ilgili temel profil bilgilerini almak için kimlik jetonunun kodunu çözebilir veya sunucuda güvenli bir şekilde kimlik doğrulaması yapmak için kimlik jetonunu uygulamanızın arka uç sunucusuna gönderebilir. Uygulamanız, kullanıcının yetkilendirdiği Google API'lerini çağırmak için erişim jetonunu da kullanabilir.
Kimlik ve erişim jetonlarının geçerlilik süreleri sınırlıdır. Kullanıcının oturumunu jetonların geçerlilik süresi sona erdikten sonra da açık tutmak için yenileme jetonunu saklayın ve yeni jeton istemek için kullanın.
Kimlik jetonundan kullanıcı profili bilgilerini alma
Kimlik jetonunun kodunu herhangi bir JWT kod çözme kitaplığıyla çözerek oturum açmış kullanıcıyla ilgili profil bilgilerini alabilirsiniz. Örneğin, Auth0 jwt-decode JavaScript kitaplığını kullanarak:
var user_profile = jwt_decode(<var>id_token</var>);
// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];
// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];
Daha fazla bilgi
- Kullanıcıların oturumunu, kimlik jetonunun geçerlilik süresi sona erdikten sonra da açık tutmak için Erişim jetonunu yenileme başlıklı makaleyi inceleyin.
- Arka uç sunucusuyla kimlik doğrulamanız gerekiyorsa güvenli şekilde doğrulama yapma hakkında bilgi edinmek için Arka uç sunucusuyla kimlik doğrulama başlıklı makaleyi inceleyin.