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 bir kısa kod ve oturum açma URL'si gösterir. Daha sonra, kullanıcı bir web tarayıcısında oturum açma URL'sini 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ı oturum açar.
Bu oturum açma akışını kullanmak için uygulamanın aşağıdaki ölçütleri karşılayan bir cihazda çalışması gerekir:
- Cihaz, kullanıcıya talimatlarla birlikte 40 karakterlik bir URL ve 15 karakterli bir kullanıcı kodunu görüntüleyebilmelidir.
- Cihaz internete bağlı olmalıdır.
İstemci kimliği ve istemci gizli anahtarı alma
Google'ın oturum açma uç noktalarına istek gönderebilmek için uygulamanızın bir 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'ni tıklayarak ve 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 alırsınız. İstekle birlikte istemci kimliğinizi ve ihtiyaç duyduğunuz kapsamların bir 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. Kullanıcılar adına desteklenen bir API'yi çağırma izni de istiyorsanız profile
ve email
kapsamlarının yanı sıra gerekli kapsamları da isteyin.
Aşağıda kullanıcı kodu için örnek bir istek verilmiştir:
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ılarak:
curl -d "client_id=YOUR_GOOGLE_CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code
Yanıt bir 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, kullanıcıya user_code
ve verification_url
değerlerini gösterir ve aynı anda belirtilen interval
konumundaki oturum açma uç noktasını kullanıcı oturum açana veya expires_in
tarafından belirtilen süre geçene kadar sorgular.
Kullanıcı kodunu ve doğrulama URL'sini göster
Cihaz uç noktasından kullanıcı kodu ve doğrulama URL'si aldıktan sonra, bunları görüntüleyin ve kullanıcıdan URL'yi açıp kullanıcı kodunu girmesi için talimat verin.
verification_url
ve user_code
değerleri değişebilir. Kullanıcı arayüzünüzü aşağıdaki sınırları kaldırabilecek şekilde tasarlayın:
user_code
, 15W
boyutunda karakteri işleyebilecek kadar geniş bir alanda görüntülenmelidir.verification_url
, 40 karakter uzunluğundaki bir URL dizesini işleyecek kadar geniş bir alanda görüntülenmelidir.
Her iki dize de US-ASCII karakter kümesinden yazdırılabilir herhangi bir karakteri içerebilir.
user_code
dizesini görüntülerken, dizede hiçbir şekilde değişiklik yapmayın (örneğin, büyük/küçük harf kullanımını değiştirme veya diğer biçimlendirme karakterleri ekleme). Aksi takdirde, kod biçimi ileride değişirse uygulamanız bozulabilir.
İsterseniz görüntüleme amacıyla URL'deki şemayı kaldırarak verification_url
dizesini değiştirebilirsiniz. Öyleyse uygulamanızın hem "http" hem de "https" varyantlarını işleyebildiğinden emin olun. verification_url
dizesini başka ş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 ile 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 kimlik jetonu, Google API'lerini çağırmak için erişim jetonu ve yeni jetonlar edinmek için yenileme jetonu alabilir.
Kimlik jetonu alma ve yenileme jetonu
Uygulamanız kullanıcı kodunu ve doğrulama URL'sini görüntüledikten sonra, jeton uç noktasını (https://oauth2.googleapis.com/token
) cihaz uç noktasından aldığınız cihaz koduyla yoklamaya başlayın. Jeton uç noktasını, interval
değeriyle belirtilen aralıkta (saniye cinsinden) sorgulayı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ılarak:
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 onaylamadıysa yanıt şu şekilde olur:
{
"error" : "authorization_pending"
}
Uygulamanız bu istekleri, interval
değerini aşmayan bir hızda tekrarlamalıdır. Uygulamanız çok hızlı anket yapıyorsa yanıt şöyle olur:
{
"error" : "slow_down"
}
Kullanıcı oturum açıp uygulamanıza istediğiniz kapsamlar için erişim izni verdikten sonra, uygulamanızın bir sonraki isteğine verilen yanıtta kimlik jetonu, erişim jetonu ve yenileme jetonu bulunur:
{
"access_token": "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
"id_token": "eyJhbGciOiJSUzI..."
}
Bu yanıt alındığında uygulamanız, oturum açmış kullanıcıyla ilgili temel profil bilgilerini almak için kimlik jetonunun kodunu çözebilir veya sunucuyla 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 de erişim jetonunu kullanabilir.
Kimlik ve erişim jetonlarının kullanım ömrü sınırlıdır. Jetonların kullanım ömürlerinden sonra kullanıcının oturumunun açık kalması için yenileme jetonunu depolayın ve yeni jetonlar istemek üzere kullanın.
Kimlik jetonundan kullanıcı profili bilgilerini alma
Herhangi bir JWT kod çözme kitaplığıyla kimlik jetonunun kodunu çözerek, oturum açmış kullanıcının 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
- Kimlik jetonunun kullanım ömrü boyunca kullanıcıların oturumunu açık tutmak için Erişim jetonunu yenileme bölümüne bakın.
- Bir arka uç sunucusuyla kimlik doğrulaması yapmanız gerekiyorsa bu işlemi güvenli bir şekilde gerçekleştirme hakkında bilgi edinmek için Arka uç sunucusuyla kimlik doğrulama bölümüne bakın.