OpenID Bağlan

Google'ın OpenID Bağlan uç nokta OpenID'yi onaylıdır.

Google'ın OAuth 2.0 API'leri kimlik doğrulama ve yetkilendirme ikisi için de kullanılabilir. Bu belge bizim OAuth uyan kimlik doğrulaması için 2.0 uygulanmasını açıklar OpenID Bağlan şartname ve bir OpenID Sertifikalı . Bulunan belgeler Erişim Google API'larına OAuth 2.0 Kullanma da bu servise için de geçerlidir. Etkileşimli bu protokolü keşfetmek istiyorsanız, önerdiğimiz Google OAuth 2.0 Playground . Hakkında yardım almak için yığın taşması , 'google-OAuth' ile sorularınıza etiketleyin.

OAuth 2.0 kurma

Başvurunuz kullanıcı girişi için Google'ın OAuth 2.0 kimlik doğrulama sistemini kullanmak için, önce bir proje ayarlamalıdır Google API Console OAuth 2.0 kimlik bilgileri elde etmek için bir yönlendirme URI ayarlayın ve (isteğe bağlı olarak) sizin kullanıcılar gördükleri marka bilgileri özelleştirmek kullanıcı onayı ekranı. Ayrıca kullanabilirsiniz API Console , faturalama sağlamak filtreleme kurmak, ve diğer görevleri yapmak, bir hizmet hesabı oluşturun. Daha fazla ayrıntı için bkz Google API ConsoleYardım .

OAuth 2.0 kimlik edinme

Google'ın API'leri kullanıcıları ve kazanç erişim kimlik doğrulaması için OAuth istemci kimliği ve müşteri sırrı dahil 2.0 kimlik, gerekir.

To view the client ID and client secret for a given OAuth 2.0 credential, click the following text: Select credential. In the window that opens, choose your project and the credential you want, then click View.

Or, view your client ID and client secret from the Credentials page in API Console:

  1. Go to the Credentials page.
  2. Click the name of your credential or the pencil () icon. Your client ID and secret are at the top of the page.

bir yönlendirme ayarlayın URI

Eğer belirlenen bu yönlendirme URI API Console Google'ın yanıtları gönderir nerede belirleyen kimlik doğrulama istekleri .

To create, view, or edit the redirect URIs for a given OAuth 2.0 credential, do the following:

  1. Go to the Credentials page.
  2. In the OAuth 2.0 client IDs section of the page, click a credential.
  3. View or edit the redirect URIs.

If there is no OAuth 2.0 client IDs section on the Credentials page, then your project has no OAuth credentials. To create one, click Create credentials.

Kullanıcı izni ekranını özelleştirme

senin kullanıcılar için, OAuth 2.0 kimlik deneyimi kullanıcı bırakmadan olduğunu bilgi ve bunun şartlar açıklayan bir rıza ekran içerir. kullanıcı açtığında Örneğin, onların e-posta adresi ve temel hesap bilgilerine uygulama erişim sağlamak için istenebilir. Kullanarak bu bilgilere erişim talebinde bulunmak scope uygulamanızın kendi içinde kapsar parametre, kimlik doğrulama isteği . Diğer Google API'leri isteği erişimine kapsamları kullanabilirsiniz.

Kullanıcı izni ekran kişilere aynı zamanda ürün adı, logosu ve bir ana sayfa URL'si gibi bilgileri marka sunar. İçeri marka bilgileri kontrol API Console.

Projenizin onay ekranını etkinleştirmek için:

  1. Consent Screen page yılında Google API Console .
  2. If prompted, select a project, or create a new one.
  3. Formu doldurun ve Kaydet'i tıklayın .

OAuth 2.0 ve Google Drive kapsamları bir arada istekte mevcut olduğunda, bir kullanıcı bunu görür aşağıdaki rıza iletişim gösterilmektedir. (Bu genel iletişim kullanılarak oluşturulan Google OAuth 2.0 Playground bunun kuracaklardır marka bilgileri içermez, böylece API Console.)

Onay sayfası ekran görüntüsü

hizmet erişme

Google ve üçüncü taraflara siz kullanıcıların kimliğini doğrulamak ve Google API'larına erişim kazanma uygulama ayrıntıları birçok bakmak kullanabileceği kütüphaneleri sağlar. Örnekler arasında , Google ile Oturum Açma özelliğini ve Google istemci kütüphaneleri çeşitli platformlarla için mevcuttur.

HTTP isteği açıklar bu belgenin, geri kalan yönergeleri, kütüphane kullanma takip etmek değil seçerseniz o underly mevcut kütüphaneleri akar.

kullanıcı kimlik denetimi

kullanıcı kimlik denetimi bir kimlik belirteci elde etmek ve bunu doğrulamak içerir. Kimlik belirteçleri bir standardize özelliğidir OpenID Connect'e internette kimlik iddialarını paylaşımı kullanılmak üzere tasarlanmış.

bir kullanıcıyı doğrulama ve "sunucu" olarak adlandırılır belirteç bir kimlik elde etmek için en çok kullanılan yaklaşım akış ve "kapalı" akış. Sunucu akışı bir tarayıcı veya mobil cihazı kullanan kişinin kimliğini doğrulamak için bir uygulamanın arka uç sunucusuna sağlar. bir kullanıcı uygulaması, (tipik haliyle bir JavaScript uygulama tarayıcıda çalışan) erişim API'lerine yerine doğrudan arka uç sunucusu üzerinden gerektiğinde örtülü akış kullanılır.

Bu belge, kullanıcının kimliğini doğrulamak için sunucu akışını nasıl gerçekleştirileceği açıklanır. örtülü akış önemli ölçüde daha çünkü taşıma ve istemci tarafında belirteçleri kullanarak güvenlik riskleri karmaşıktır. Bir örtülü akışını uygulamak gerekiyorsa, biz çok kullanmanızı öneririz Google oturum açma .

Sunucu akışı

Emin olun uygulamanızı kurmak API Console bu protokolleri kullanmak ve kullanıcıların kimliğini doğrulamak için etkinleştirmek için. Bir kullanıcı Google ile oturum açmaya çalıştığında, aşağıdakileri yapmanız gerekir:

  1. Bir anti-sahtecilik devlet jetonu oluştur
  2. Google'a bir kimlik doğrulama isteği gönder
  3. Sahtekarlığa karşı durum belirteci teyit
  4. Değişim code erişim belirteci ve kimlik jetonu için
  5. İD belirteci kullanıcı bilgileri elde edilir
  6. kullanıcının kimliğini doğrulamak

bir anti-sahte durum belirteci oluşturmak için 1.

Sen istek sahteciliği saldırıları engelleyerek kullanıcıların güvenliğini korumak zorundadır. İlk adım uygulaması ve kullanıcının istemci arasındaki durumunu tutan benzersiz bir oturum jetonu yaratıyor. Daha sonra kullanıcı isteği değil, kötü niyetli bir saldırgan yapıyor doğrulamak için Google OAuth Girişi hizmeti tarafından döndürülen kimlik doğrulama yanıtı ile belirteci bu eşsiz oturumu maç. Bu simgeler genellikle xsrf (olarak adlandırılır CSRF ) belirteçleri.

Bir devlet jetonu İyi bir seçim 30 dizesidir veya karakter öylesine yüksek kaliteli rasgele sayı üreteci kullanılarak inşa edilmiştir. Başka da arka uçta gizli tutulan bir anahtar ile oturum durumu değişkenlerinin bazı imzalayarak oluşturulan karma olduğunu.

Aşağıdaki kod benzersiz oturum belirteç oluşturmak gösterir.

PHP

Sen indirmelisiniz PHP için Google API'leri istemci kitaplığı Bu örneği kullanmak için.

// Create a state token to prevent request forgery.
// Store it in the session for later validation.
$state = bin2hex(random_bytes(128/8));
$app['session']->set('state', $state);
// Set the client ID, token state, and application name in the HTML while
// serving it.
return $app['twig']->render('index.html', array(
    'CLIENT_ID' => CLIENT_ID,
    'STATE' => $state,
    'APPLICATION_NAME' => APPLICATION_NAME
));

Java

Sen indirmelisiniz Java için Google API'leri istemci kitaplığı Bu örneği kullanmak için.

// Create a state token to prevent request forgery.
// Store it in the session for later validation.
String state = new BigInteger(130, new SecureRandom()).toString(32);
request.session().attribute("state", state);
// Read index.html into memory, and set the client ID,
// token state, and application name in the HTML before serving it.
return new Scanner(new File("index.html"), "UTF-8")
    .useDelimiter("\\A").next()
    .replaceAll("[{]{2}\\s*CLIENT_ID\\s*[}]{2}", CLIENT_ID)
    .replaceAll("[{]{2}\\s*STATE\\s*[}]{2}", state)
    .replaceAll("[{]{2}\\s*APPLICATION_NAME\\s*[}]{2}",
    APPLICATION_NAME);

piton

Sen indirmelisiniz Python için Google API'leri istemci kitaplığı Bu örneği kullanmak için.

# Create a state token to prevent request forgery.
# Store it in the session for later validation.
state = hashlib.sha256(os.urandom(1024)).hexdigest()
session['state'] = state
# Set the client ID, token state, and application name in the HTML while
# serving it.
response = make_response(
    render_template('index.html',
                    CLIENT_ID=CLIENT_ID,
                    STATE=state,
                    APPLICATION_NAME=APPLICATION_NAME))

Google'a bir kimlik doğrulama isteği gönder 2.

Bir sonraki adım bir HTTPS kurmakta olduğunu GET uygun URI parametrelerle isteği. daha doğrusu bu sürecin tüm aşamalarında daha HTTP, HTTPS kullanımına dikkat; HTTP bağlantıları kabul edilmediğinde. Sen gelen baz URI'yı almak gerekir Keşif belgesinde kullanarak authorization_endpoint meta veri değeri. Aşağıdaki tartışma URI tabanını varsayar https://accounts.google.com/o/oauth2/v2/auth .

Temel bir isteği için, aşağıdaki parametreleri:

  • client_id Eğer elde ettiğimiz, API ConsoleCredentials page.
  • response_type temel yetki kodu akış isteğinde olması gereken code . (Devamı için response_type .)
  • scope temel bir talepte gerektiğini openid email . (Devamı için scope .)
  • redirect_uri Google'dan yanıt alırsınız sunucunuzda HTTP bitiş noktası olmalıdır. Değeri tam olarak yapılandırılmış OAuth 2.0 müşteri için yetkili yönlendirme URI'lerinin birine uygun olmalıdır API ConsoleCredentials page. Bu değer, yetkili URI uymuyorsa, istek başarısız olur redirect_uri_mismatch hatası.
  • state karşıtı sahtecilik benzersiz bir oturum belirteci değerini, hem de örneğin uygulamanıza, kullanıcı döner, URL'yi başlatırken bağlamı kurtarmak için gerekli olan diğer bilgileri içermelidir. (Devamı için state .)
  • nonce tekrar ne zaman koruma mevcut sağlayan uygulamanızın ürettiği rastgele bir değerdir.
  • login_hint kullanıcının e-posta adresi veya olabilir sub kullanıcının Google kimliğiyle eş değer dizesi. Bir login_hint ve kullanıcı şu anda kaydedilir, rıza ekran uygulamanıza kullanıcının e-posta adresini serbest bırakmak için onay için bir istek mevcuttur. (Devamı için login_hint .)
  • Kullanım hd Bir Google Cloud örgütü ile ilişkili belirli bir etki kullanıcıları için OpenID Bağlan akışını optimize etmek için parametre. (Devamı için hd .)

İşte okunabilmesi için satır sonları ve boşluk ile tam bir OpenID'yi Bağlan kimlik doğrulama URI örneğidir şöyledir:

https://accounts.google.com/o/oauth2/v2/auth?
 response_type=code&
 client_id=424911365001.apps.googleusercontent.com&
 scope=openid%20email&
 redirect_uri=https%3A//oauth2.example.com/code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2-login-demo.example.com%2FmyHome&
 login_hint=jsmith@example.com&
 nonce=0394852-3190485-2490358&
 hd=example.com

Kullanıcılar uygulama onlar hakkında herhangi bir yeni bilgi istediğinde veya uygulama istekleri hesap erişimi eğer daha önce onaylanmayan ki eğer rıza gerekmektedir.

3. teyit sahtekarlığa karşı durum belirteci

Yanıt gönderilir redirect_uri sen belirtilenden isteği . aşağıda gösterildiği gibi Tüm yanıtlar, sorgu dizesinde döndürülür:

https://oauth2.example.com/code?state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foa2cb.example.com%2FmyHome&code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&scope=openid%20email%20https://www.googleapis.com/auth/userinfo.email

Sunucuda, onaylamanız gerekir state oluşturduğunuz jeton Google'dan alınan oturumu maçları Adım 1 . Bu gidiş-dönüş doğrulama kullanıcı değil, kötü niyetli bir senaryo, istekte emin olmak için yardımcı olur.

Aşağıdaki kod oturumu teyit 1. Adımda oluşturduğunuz belirteçleri gösterir:

PHP

Sen indirmelisiniz PHP için Google API'leri istemci kitaplığı Bu örneği kullanmak için.

// Ensure that there is no request forgery going on, and that the user
// sending us this connect request is the user that was supposed to.
if ($request->get('state') != ($app['session']->get('state'))) {
  return new Response('Invalid state parameter', 401);
}

Java

Sen indirmelisiniz Java için Google API'leri istemci kitaplığı Bu örneği kullanmak için.

// Ensure that there is no request forgery going on, and that the user
// sending us this connect request is the user that was supposed to.
if (!request.queryParams("state").equals(
    request.session().attribute("state"))) {
  response.status(401);
  return GSON.toJson("Invalid state parameter.");
}

piton

Sen indirmelisiniz Python için Google API'leri istemci kitaplığı Bu örneği kullanmak için.

# Ensure that the request is not a forgery and that the user sending
# this connect request is the expected user.
if request.args.get('state', '') != session['state']:
  response = make_response(json.dumps('Invalid state parameter.'), 401)
  response.headers['Content-Type'] = 'application/json'
  return response

4. Alım code erişim belirteci ve kimlik belirteci

Yanıtı içeren code parametresi sunucu bir belirteç erişim ve kimlik jetonu karşılığında olabilir yani bir kerelik yetkilendirme kodu. Sunucunuz HTTPS göndererek bu alışverişini yapar POST isteği. POST isteği dan almak gerekir belirteç son nokta, gönderilen Discovery belgenin kullanarak token_endpoint meta veri değeri. Aşağıdaki tartışma uç noktasıdır varsayar https://oauth2.googleapis.com/token . İstek halinde aşağıdaki parametreleri içermelidir POST gövdesinin:

Alanlar
code Döndürülen yetkilendirme kodu ilk istek .
client_id Eğer elde ettiğimiz bu istemci kimliği API ConsoleCredentials pageaçıklandığı gibi, OAuth 2.0 kimlik bilgileri elde .
client_secret Eğer elde ettiğimiz bu istemci gizli API ConsoleCredentials pageaçıklandığı gibi, OAuth 2.0 kimlik bilgileri elde .
redirect_uri Verilen için yetkili bir yönlendirme tanım client_id belirtilen API ConsoleCredentials pagetarif edildiği gibi, bir yönlendirme tanım .
grant_type Bu alan, bir değerini içermelidir authorization_code , OAuth 2.0 spesifikasyonda tanımlandığı gibi .

Gerçek isteği aşağıdaki örnek gibi görünebilir:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your-client-id&
client_secret=your-client-secret&
redirect_uri=https%3A//oauth2.example.com/code&
grant_type=authorization_code

Bu talebe Başarılı yanıt bir JSON dizide aşağıdaki alanları içerir:

Alanlar
access_token Bir Google API gönderilebilir bir simge.
expires_in saniyede belirteci erişim kalan süresi.
id_token Bir JWT dijital olarak Google tarafından imzalanır kullanıcı hakkında kimlik bilgilerini içerir.
scope Erişim kapsamları tarafından verilen access_token boşlukla ayrılmış, küçük harf duyarlı dizeleri bir liste olarak ifade edilir.
token_type Tanımlar geri belirteç türü. Şu anda, bu alan her zaman değer vardır Bearer .
refresh_token (isteğe bağlı)

Bu alan yalnızca mevcut access_type parametresi olarak ayarlandı offline içinde kimlik doğrulama isteği . Ayrıntılar için bkz Yenile belirteçleri .

İD belirteci kullanıcı bilgileri elde edilir 5.

Kimlik Token olan JWT olan (JSON Web Jetonu), bir şifrelenmiş olarak imzalanır Base64 kodlu JSON nesnesi. Normalde, bu kritik bir kimlik belirteci doğrulamak kullanmadan önce, ancak bir aracı içermeyen HTTPS kanal üzerinden doğrudan Google ile iletişim kurma ve Google'a kimliğinizi doğrulamak için istemci sırrı kullanarak verildiği için, emin olabilirsiniz sizin belirteç almak gerçekten Google'dan geliyor ve geçerlidir. Sunucu uygulamanızın diğer bileşenlere belirteci kimliği geçerse, diğer bileşenler son derece önemli olduğunu belirteci doğrulamak kullanmadan önce.

En API kütüphaneleri base64url kodlanmış değerlerini deşifre ve içinde JSON ayrıştırma çalışmaları ile doğrulama birleştirmek beri Kimlik jetonu iddiaları erişirken, muhtemelen belirteç Neyse doğrulayarak sona erecek.

Kimlik jetonun yük

Kimlik belirteci isim / değer ikilileriyle bir dizi ihtiva eden bir JSON amacıdır. İşte okunabilmesi için biçimlendirilmiş bir örnek verilmiştir:

{
  "iss": "https://accounts.google.com",
  "azp": "1234987819200.apps.googleusercontent.com",
  "aud": "1234987819200.apps.googleusercontent.com",
  "sub": "10769150350006150715113082367",
  "at_hash": "HK6E_P6Dh8Y93mRNtsDB1Q",
  "hd": "example.com",
  "email": "jsmith@example.com",
  "email_verified": "true",
  "iat": 1353601026,
  "exp": 1353604926,
  "nonce": "0394852-3190485-2490358"
}

Hakkında İD Jetonlar ( istemlerde olarak da bilinir) aşağıdaki alanları içerebilir:

İddia Tedarik edilen Tanım
aud her zaman bu kimlik belirteci yöneliktir hedef kitle. Bu uygulama OAuth 2.0 istemci kimlikleri biri olmalıdır.
exp her zaman Kimlik jetonu kabul edilmemelidir tarihinde veya daha sonra Bitiş saati. Unix zaman (tamsayı saniye) Temsil.
iat her zaman Zaman İD belirteci yayımlanmıştır. Unix zaman (tamsayı saniye) Temsil.
iss her zaman yanıtın ihraççının için Verenin Tanıtıcı. Daima https://accounts.google.com veya accounts.google.com tarihinde kimliği için belirteçleri.
sub her zaman yeniden tüm Google hesaplarının ve asla arasında benzersiz kullanıcı için tanıtıcısı. Bir Google hesabı zaman içinde farklı noktalarda birden e-posta adresleri olabilir, ancak sub değeri değişti asla. Kullanım sub kullanıcı için benzersiz tanımlayıcı anahtar olarak uygulama içinde. 255 harf duyarlı ASCII karakter maksimum uzunluğu.
at_hash Erişim belirteci karması. erişim belirteci kimlik belirteci bağlı olduğunu doğrulama sağlar. İD verisi bir verilir ise access_token sunucu akış değeri, bu talebi her dahildir. Bu iddia xsrf saldırılarına karşı korumak için alternatif bir mekanizma olarak kullanılabilir, ancak izlerseniz Adım 1 ve Adım 3 erişim belirteci doğrulamak için gerekli değildir.
azp client_id yetkili sunum yapan. İD jeton talep taraf kimlik belirteci kitle ile aynı değildir, bu talebi sadece gereklidir. Bu bir web uygulaması ve Android uygulaması farklı bir OAuth 2.0 olduğu hibrit uygulamalar için Google'da durumda olabilir client_id ama aynı Google API'leri projesini paylaşır.
email kullanıcının e-posta adresi. Bu değer, bu kullanıcıya özgü vermeye ve birincil anahtar olarak kullanılmak için uygun değildir olabilir. Senin kapsamı dahil yalnızca Sağlanan email kapsamı değerini.
email_verified Gerçek kullanıcının e-posta adresi doğrulanmadı edilmişse; Aksi yanlış.
family_name Kullanıcının soyadı (ler) ya da son ad (lar). Bir zaman sağlanabilir name talebi mevcuttur.
given_name Kullanıcının verilen ad (lar) ya da ilk ad (lar). Bir zaman sağlanabilir name talebi mevcuttur.
hd kullanıcının Google Bulut organizasyonu ile ilişkili alan. Kullanıcı bir Google Bulut kuruluşa ait yalnızca sağlanmıştır.
locale Bir temsil kullanıcının yerel, BCP 47 dil etiketi. Bir zaman sağlanabilir name talebi mevcuttur.
name Kullanıcının tam adı, bir görüntülenebilir formda. ne zaman sağlanacak olabilir:
  • istek kapsamı dizesi "profili" dahil
  • İD belirteci bir belirteç yenileme döndürülen

Ne zaman name iddialar mevcuttur, uygulamanızın kullanıcı kayıtlarını güncellemek için kullanabilirsiniz. Bu iddianın mevcut olması garanti asla unutmayın.

nonce Değeri nonce kimlik doğrulama isteği uygulamanızda tarafından sağlanan. Sadece bir kez sunulmuştur bunu sağlayarak tekrarlanan saldırılara karşı koruma uygulamak gerekir.
picture Kullanıcının profil resminin URL'si. ne zaman sağlanacak olabilir:
  • istek kapsamı dizesi "profili" dahil
  • İD belirteci bir belirteç yenileme döndürülen

Ne zaman picture iddialar mevcuttur, uygulamanızın kullanıcı kayıtlarını güncellemek için kullanabilirsiniz. Bu iddianın mevcut olması garanti asla unutmayın.

profile Kullanıcının profil sayfasının URL. ne zaman sağlanacak olabilir:
  • istek kapsamı dizesi "profili" dahil
  • İD belirteci bir belirteç yenileme döndürülen

Ne zaman profile iddialar mevcuttur, uygulamanızın kullanıcı kayıtlarını güncellemek için kullanabilirsiniz. Bu iddianın mevcut olması garanti asla unutmayın.

6. kimlik doğrulaması Kullanıcı

Kimlik jetonu gelen kullanıcı bilgilerini elde ettikten sonra uygulamanızın kullanıcı veritabanını sorgulaması gerekir. kullanıcı zaten veritabanında varsa tüm giriş şartları Google API tepki ile karşılandığı takdirde, o kullanıcı için bir uygulama oturumu başlamalıdır.

Kullanıcı, kullanıcı veritabanında yoksa, yeni kullanıcı hesap oluşturma işlemleri için kullanıcı yönlendirmelidir. Sen mümkün olabilir için otomatik kayıt Google'dan aldığınız, ya da en azından size kayıt formunda gerektiren alanların birçoğu önceden doldurabilirsiniz mümkün olabilir bilgilere dayanarak kullanıcıyı. Kimlik jetonu bilgilere ek olarak, ek alabilirsiniz kullanıcı profili bilgilerini kullanıcı profili sonnoktaları.

Gelişmiş konular

Aşağıdaki bölümlerde daha detaylı Google OAuth 2.0 API açıklar. Bu bilgiler kimlik doğrulama ve yetkilendirme etrafında gelişmiş şartlara geliştiriciler için tasarlanmıştır.

Diğer Google API'leri erişim

Kimlik doğrulama için OAuth 2.0 kullanmanın avantajlarından biri sizin uygulaması kullanıcının kimliğini doğrulamak olarak izin aynı anda (YouTube, Google Drive, Takvim veya Kişiler gibi) kullanıcı adına diğer Google API'leri kullanmak alabiliriz. Bunu yapmak için, ihtiyaç duyduğu diğer kapsamları içerir kimlik doğrulama isteği Google'a gönderebilir söyledi. Örneğin, kimlik doğrulama talebine Kullanıcının yaş grubunu eklemek bir kapsam parametresi geçirmek için openid email https://www.googleapis.com/auth/profile.agerange.read . Kullanıcı üzerine uygun istenir onaylama ekranında . Geri Google'dan aldığınız belirteç erişim size talep ve verildi erişimin kapsamları ile ilgili tüm API'leri erişmesini sağlar.

Yenile jetonlar

API erişimi isteği size esnasında iade edilecek jeton bir yenileme talep edebilirsiniz code değişimi . kullanıcı uygulamanızda mevcut değilken, Google API'leri için uygulama sürekli erişim sağlayan belirteç bir yenileme. Bir yenileme göstergesi istemek için set ekleyin access_type parametresini offline sizin de doğrulama isteği .

hususlar:

  • yalnızca kod değişimi akışını gerçekleştirmek ilk defa belirteci bir yenileme alabilirsiniz çünkü güvenli ve kalıcı belirteci yenileme saklamak için emin olun.
  • Orada verilir yenileme jeton sayısını sınırlar şunlardır: istemci / kullanıcı kombinasyonu için bir sınır ve başka tüm istemciler arasında kullanıcı başına. Başvurunuz istekleri çok fazla yenileme jetonları ise, bu durumda eski yenileme durdurma çalışma Jetonlar, bu sınırların içine çalıştırabilir.

Daha fazla bilgi için, bkz (çevrimdışı erişim) belirteci bir erişim Yenileniyor .

Sen ayarlayarak uygulamayı yeniden yetkilendirmek için kullanıcıyı uyararak prompt parametreyi consent için de doğrulama isteği . Ne zaman prompt=consent dahildir, rıza ekran tüm kapsamları önce Google API'leri projesine verildi bile, uygulama erişim kapsamlarda yetki ister her zaman görüntülenir. Bu nedenle, dahil prompt=consent sadece gerektiği zaman.

Hakkında daha fazla bilgi için prompt parametresi, bkz prompt içinde Doğrulama URI parametreleri masaya.

Doğrulama URI parametreleri

Aşağıdaki tablo Google'ın OAuth 2.0 kimlik doğrulama API tarafından kabul edilen parametrelerin daha tam açıklamalarını verir.

Parametre Gerekli Tanım
client_id (Gerekli) Eğer elde ettiğimiz bu istemci kimliği dizesi API ConsoleCredentials pageaçıklandığı gibi, OAuth 2.0 kimlik edinme .
nonce (Gerekli) tekrar koruması sağlayan uygulamanızın ürettiği rastgele bir değer.
response_type (Gerekli) Değeri ise code , motorlar, bir temel yetki kodu akışı bir gerektiren POST belirteçleri elde etmek için belirteç bitiş noktasına. Eğer bu değer token id_token veya id_token token , motorlar, bir Kapalı akış belirteçleri almak için yönlendirme URI'sında JavaScript kullanımını gerektiren, URI #fragment tanımlayıcısı .
redirect_uri (Gerekli) Yanıt nereye gönderildiğini belirler. Bu parametrenin değeri tam olarak ayarlanır bu yetkili yönlendirme değerlerinden biri eşleşmelidir API ConsoleCredentials page (eğer varsa '/', HTTP veya HTTPS şeması, durum da dahil olmak üzere, ve arka).
scope (Gerekli)

Kapsam parametresi ile başlamalıdır openid değeri ve ardından dahil profile değerini, email değerini veya her ikisi.

Eğer profile alanı değeri varsa, ID belirteç kudreti (bunlarla garanti değildir) kullanıcının varsayılan içerir profile taleplerini.

Eğer email alanı değeri varsa, ID jetonu içerir email ve email_verified iddialar.

Bu OpenID özgü kapsamları ek olarak, sizin kapsamı argüman aynı zamanda diğer kapsam değerlerini içerebilir. Tüm kapsamı değerlerde ayrılmış olmalıdır. Bir kullanıcının Google Drive'a dosya başına erişimini istiyorsa Örneğin, sizin kapsam parametre olabilir openid profile email https://www.googleapis.com/auth/drive.file .

Mevcut kapsamları hakkında bilgi için bkz OAuth 2.0 hakkında API'leri için kapsamlar veya kullanmak istediğiniz Google API için dokümantasyon.

state (İsteğe bağlı, ancak şiddetle tavsiye edilir)

protokolünde yuvarlak devreden çıkarılmasına opak bir dize; o Temel akışında bir URI parametresi olarak döndü ve URI'sında edilir demek ki #fragment Örtülü akışında tanımlayıcı.

state istekleri ve yanıtları ilişkilendirmek için yararlı olabilir. Senin Çünkü redirect_uri tahmin edilebilir, bir kullanan state değerini gelen bağlantısı uygulama tarafından başlatılan bir kimlik doğrulama talebinin sonucu olduğunu da güvence artırabilir. Eğer varsa rastgele bir dize oluşturmak veya bu (örneğin bir çerez) bazı istemci devletin karma kodlamak state değişkeni ayrıca istek ve yanıt aynı tarayıcıda kökenli sağlamak için, size yanıtı doğrulayabilir. Bu tür xsrf olarak saldırılara karşı koruma sağlar.

access_type (İsteğe bağlı) İzin verilen değerlerdir offline ve online . Etkisi belgelenmiştir Çevrimdışı Erişim ; Bir erişim belirteci talep ediliyor ise, müşteri değeri sürece belirteci bir yenileme almaz offline belirtilir.
display (İsteğe bağlı) belirtmek için bir ASCII dize değeri nasıl yetkilendirme sunucu kimlik doğrulama ve rıza kullanıcı arayüzü sayfaları görüntüler. Aşağıdaki değerler belirtilmiş ve Google sunucuları tarafından kabul edildi ancak onun davranışı üzerinde herhangi bir etkisi yoktur edilir: page , popup , touch ve wap .
hd (İsteğe bağlı)

Bir Google Cloud kuruluşun sahip hesapları için giriş işlemini verimli hale getirin. (Örneğin, Google Bulut organizasyon alanını dahil ederek mycollege.edu ), hesap seçimi kullanıcı arayüzü söz konusu alan hesaplar için optimize edilmesi gerektiğini belirtebilir. Google Bulut organizasyon için optimize etmek yıldız işareti (bir değer ayarlamak, genellikle bunun yerine sadece tek bir Google Cloud organizasyon alanının hesapları * hd=* .

İstemci tarafı istekleri değiştirilebilir Ayrıca, uygulamanızı kimlerin erişebileceğini kontrol etmek için bu UI optimizasyonu güvenmeyin. Yaptığınızdan emin olun validate o belirteç döndürülen kimliği bir sahiptir hd maçlar beklediğiniz iddiası değeri (örneğin mycolledge.edu ). İstek parametresi farklı olarak, İD belirteci hd değeri güvenilir olabilir, böylece iddia Google'dan belirteci bir güvenlik içinde ihtiva edilmektedir.

include_granted_scopes (İsteğe bağlı) Bu parametre değeri ile sağlanıyorsa true ve yetkilendirme başvuru kabul edilirse, yetkilendirme diğer kapsamları için bu kullanıcı / uygulama kombinasyonu verilen önceki yetkilerini içerecektir; bkz Artan yetki .

Yüklediniz Uygulama akışıyla artan yetkilendirme yapamaz unutmayın.

login_hint (İsteğe bağlı) Uygulamanızı doğrulamaya çalışıyor hangi kullanıcı bildiği zaman, kimlik doğrulama sunucusu için bir ipucu olarak bu parametreyi sağlayabilir. Önceden doldurur ya hesap seçici bu ipucu, bastırdığı Geçme ve e-posta kutusu oturum açma formu veya seçer doğru oturumu (kullanıcı kullanıyor ise çoklu oturum uygulamanızın oluşabilir sorunları önlemeye yardımcı olabilecek,) yanlış kullanıcı hesabındaki günlükleri. Değeri email adresi veya her iki olabilir sub kullanıcının Google kimliğiyle eş değer dizesi.
prompt (İsteğe bağlı) dize değerleri boşlukla sınırlandırılmış listede bu yetkilendirme sunucusu yeniden kimlik ve rıza girmesini ister belirtir olsun. Olası değerler şunlardır:
  • none

    yetkilendirme sunucusu herhangi bir kimlik doğrulama veya kullanıcı izni ekranlarını göstermez; kullanıcı zaten doğrulanmış değildir ve istenen kapsamları için rıza önceden yapılandırılmış olmadıysa bunun bir hata döndürür. Sen kullanabilirsiniz none mevcut kimlik doğrulama ve / veya rızası kontrol etmek.

  • consent

    yetkilendirme sunucusu istemciye bilgi dönmeden önce rızası girmesini ister.

  • select_account

    yetkilendirme sunucusu, bir kullanıcı hesabını seçmek ister. Bu yetki sunucuda birden fazla hesabı olan bir kullanıcı onlar için geçerli oturumları olabileceğini birden çok hesaba arasında seçmenize olanak sağlar.

Belirtilen değer ve kullanıcının daha önce erişim yetkisi değilse, o zaman kullanıcı bir rıza ekranı gösterilir.

Bir kimlik doğrulama belirteci

Sen onlar doğrudan Google'dan geldiğini bilmeden sunucu üzerindeki tüm kimlik belirteçleri doğrulamak gerekir. herhangi bir kimlik bu istemci uygulamalar aldığı belirteçleri otantik olarak Örneğin, sunucu doğrulaması gerekir.

Sunucunuza kimlik belirteçleri gönderebilir yaygın durumlar şu şunlardır:

  • doğrulanmış gereken istekleri ile kimlik belirteçleri göndermek. Kimlik belirteçleri size istekte belirli kullanıcı söylemek ve hangi müşteri için kimlik belirteci verildi söyledi.

İD belirteçleri duyarlıdır ve ele takdirde yanlış olabilir. Bu jetonlar sadece HTTPS üzerinden ve sadece POST verileri üzerinden veya istek başlıklarına içinde onları göndererek güvenli şekilde muhafaza edilmesini sağlamalıdır. Eğer sunucu üzerinde kimlik belirteçleri depolamak, ayrıca güvenli saklamanız gerekir.

Kimlik kullanışlı belirteçleri kılan bir şey bunları uygulamanızın etrafında farklı bileşenlerini geçirebilmesi olması. Bu bileşenler, uygulama ve kullanıcı kimlik doğrulaması hafif bir kimlik doğrulama mekanizması olarak belirteci bir kimliğini kullanabilir. Eğer belirteç kimliği bilgileri kullanabilirsiniz veya kullanıcı doğrulanmış olması iddiası olarak güvenebilirsiniz Ama hepsinden önce bunu doğrulamak gerekir .

Kimlik belirtecin doğrulama birçok adım gerektirir:

  1. Kimlik jetonu düzgün veren tarafından imzalanmış olduğundan emin olun. Google tarafından verilen belirteçleri URI belirtilen en sertifikaların biri bulundu kullanılarak imzalanır jwks_uri meta değeri Keşif belgenin .
  2. Değeri, söz konusu doğrulama iss İD belirteci İstem eşittir https://accounts.google.com veya accounts.google.com .
  3. Değeri doğrulayın aud kimlik jetonu İstem uygulamanızın müşteri kimliği eşittir.
  4. Son kullanma süresi (emin exp İD belirtecin talebi) geçmedi.
  5. Eğer bir belirtilirse hd parametre isteğinde değeri, kimlik belirteci bir sahip olduğunu doğrulamak hd Bir Google Cloud örgütü ile bağlantılı kabul edilen bir alan adıyla eşleşen iddia.

Adımlar 2 ila 5 yüzden burada detay onları olmaz, oldukça basittir ama dize ve tarih karşılaştırmaları içerir.

İlk adım daha karmaşıktır ve şifreli imzayı kontrol edilmesini içerir. Hata ayıklama amacıyla, Google en kullanabilirsiniz tokeninfo sunucu veya cihazda uygulanan lokal işleme karşı karşılaştırmak için son nokta. Kimlik jetonun değerdir varsayalım XYZ123 . Sonra URI KQUEUE olur https://oauth2.googleapis.com/tokeninfo?id_token= XYZ123 . jeton imzası geçerli ise, tepkisi çözülmüş JSON nesnesi şeklinde JWT'de yük olacaktır.

tokeninfo son nokta ayıklama için değil, üretim amaçları için yararlıdır, anahtarlardan Google'ın ortak anahtarlar son nokta ve yerel olarak doğrulama gerçekleştirmek almak. Sen anahtarları URI almak gerekir Keşif belgesinde kullanarak jwks_uri meta veri değeri. ayıklama bitiş noktasına istekleri aralıklı hatalar tabi malzemeleri throttled veya olabilir.

Google, sadece seyrek olarak genel anahtarları değiştirir olduğundan, vakaların büyük çoğunluğunda, kullanarak çok daha verimli yerel doğrulama gerçekleştirmek, HTTP yanıtı önbellek direktiflerini kullanarak bunları önbelleğe edebilir tokeninfo son nokta. Bu doğrulama alma ve sertifikaları ayrıştırma ve imzayı kontrol etmek, uygun kriptografik çağrı yapmaya gerektirir. Dillerin çok çeşitli kullanılabilir Neyse ki, orada iyi debug olan kütüphaneler (bkz Bunu gerçekleştirmek için jwt.io ).

kullanıcı profili bilgilerini edinme

Kullanıcı hakkında ek profil bilgilerini elde etmek için, (Başvurunuz sırasında aldığı erişim belirteci kullanabilirsiniz doğrulama akışına ) ve OpenID Bağlan standardını:

  1. OpenID-uyumlu olması için sen içermelidir openid profile sizin de kapsam değerlerini doğrulama isteği .

    Eğer kullanıcının e-posta adresi dahil olmak istiyorsanız, ek bir kapsam değeri belirtebilirsiniz email . Her iki belirtmek için profile ve email , kendi kimlik doğrulama isteği URI aşağıdaki parametreyi içerebilir:

    scope=openid%20profile%20email
  2. Yetkilendirme başlığına belirteci erişiminizi ekleyin ve bir HTTPS yapmak GET userinfo son nokta, aralarından almak hangi isteği Keşif belgenin kullanarak userinfo_endpoint meta veri değeri. Userınfo yanıt olarak tarif edilen kullanıcı hakkında bilgi içerir OpenID'yi iletişime OpenID Connect Standard Claims ve claims_supported Keşif belge meta değeri. Eğer erişim yetkili kapsamları için her alan için bilgi almak olmayabilir bu yüzden kullanıcılar veya bunların kuruluşları, kaynağına veya belirli alanlara durdurabileceğimizi seçebilir.

Keşif belge

OpenID Bağlan protokol, kullanıcıların kimliğini doğrulamak için ve jeton, kullanıcı bilgilerinin ve kamu anahtarları da dahil kaynaklarını talep birden fazla uç kullanımını gerektirir.

uygulamaları ve artış esneklik basitleştirmek için, OpenID Connect "Keşif belgenin" bir JSON belge yetki URI'lerinin dahil OpenID Bağlan sağlayıcının yapılandırmasına ilişkin ayrıntıları sağlamak anahtar-değer çiftlerini içeren tanınmış yerde bulunan bir kullanılmasına izin verir , jeton, iptal, userinfo ve kamu-tuşları bitiş noktaları. Google'ın OpenID Bağlan hizmeti için Keşif belge alınan edilebilir:

https://accounts.google.com/.well-known/openid-configuration

Google'ın OpenID Bağlan hizmetlerini kullanmak için şunları yapmalısınız koda Keşif-belge URI ( https://accounts.google.com/.well-known/openid-configuration uygulamanıza). Başvuruların, yanıt olarak kurallarını önbelleğe uygular, belgeyi getirir gerektiği gibi ondan uç nokta URI'ları alır. Örneğin, bir kullanıcının kimliğini doğrulamak için, kodunuz almak istiyorum authorization_endpoint (meta veri değeri https://accounts.google.com/o/oauth2/v2/auth gönderilen kimlik doğrulama istekleri için temel tanım olarak aşağıdaki örnekte) Google.

Burada, örneğin, bir belgenin bir örneğidir; alan adları belirtilen olanlardır OpenID Bağlan Discovery 1.0 (anlamları için bu belgeye bakın). onlar gerçek Google Keşif belgenin son sürümü kopyalanan rağmen değerler, sadece açıklama amaçlıdır ve değişebilir:

{
  "issuer": "https://accounts.google.com",
  "authorization_endpoint": "https://accounts.google.com/o/oauth2/v2/auth",
  "device_authorization_endpoint": "https://oauth2.googleapis.com/device/code",
  "token_endpoint": "https://oauth2.googleapis.com/token",
  "userinfo_endpoint": "https://openidconnect.googleapis.com/v1/userinfo",
  "revocation_endpoint": "https://oauth2.googleapis.com/revoke",
  "jwks_uri": "https://www.googleapis.com/oauth2/v3/certs",
  "response_types_supported": [
    "code",
    "token",
    "id_token",
    "code token",
    "code id_token",
    "token id_token",
    "code token id_token",
    "none"
  ],
  "subject_types_supported": [
    "public"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"
  ],
  "scopes_supported": [
    "openid",
    "email",
    "profile"
  ],
  "token_endpoint_auth_methods_supported": [
    "client_secret_post",
    "client_secret_basic"
  ],
  "claims_supported": [
    "aud",
    "email",
    "email_verified",
    "exp",
    "family_name",
    "given_name",
    "iat",
    "iss",
    "locale",
    "name",
    "picture",
    "sub"
  ],
  "code_challenge_methods_supported": [
    "plain",
    "S256"
  ]
}

Sen Discovery belgesinden değerleri önbelleğe alarak bir HTTP gidiş-dönüş önlemek mümkün olabilir. Standart HTTP önbelleğe alma üst kullanılmakta ve saygı duyulmalıdır.

İstemci kütüphaneleri

aşağıdaki istemci kütüphaneleri popüler platformlarda entegre ederek OAuth 2.0 daha basit uygulayan yapmak:

OpenID Bağlan uyum

Google'ın OAuth 2.0 kimlik doğrulama sistemi destekleyen gerekli özellikleri arasında OpenID Bağlan Çekirdek şartname. OpenID Connect'e ile çalışmak için tasarlanmıştır herhangi bir istemci (haricinde bu hizmet ile birlikte çalışan gerektiğini OpenID isteği nesne ).