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:
- Go to the Credentials page.
- Click the name of your credential or the pencil (create) 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:
- Go to the Credentials page.
- In the OAuth 2.0 client IDs section of the page, click a credential.
- 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:
- Aç Consent Screen page yılında Google API Console .
- If prompted, select a project, or create a new one.
- 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.)

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:
- Bir anti-sahtecilik devlet jetonu oluştur
- Google'a bir kimlik doğrulama isteği gönder
- Sahtekarlığa karşı durum belirteci teyit
- Değişim
code
erişim belirteci ve kimlik jetonu için - İD belirteci kullanıcı bilgileri elde edilir
- 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ı gerekencode
. (Devamı içinresponse_type
.) -
scope
temel bir talepte gerektiğiniopenid email
. (Devamı içinscope
.) -
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 olurredirect_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çinstate
.) -
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 olabilirsub
kullanıcının Google kimliğiyle eş değer dizesi. Birlogin_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çinlogin_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çinhd
.)
İş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 |
İ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:
Ne zaman | |
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:
Ne zaman | |
profile | Kullanıcının profil sayfasının URL. ne zaman sağlanacak olabilir:
Ne zaman |
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 .
Prompting yeniden rıza
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 Eğer Eğer 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 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 |
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ı İ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 |
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:
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:
- 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 . - Değeri, söz konusu doğrulama
iss
İD belirteci İstem eşittirhttps://accounts.google.com
veyaaccounts.google.com
. - Değeri doğrulayın
aud
kimlik jetonu İstem uygulamanızın müşteri kimliği eşittir. - Son kullanma süresi (emin
exp
İD belirtecin talebi) geçmedi. - 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ı:
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çinprofile
veemail
, kendi kimlik doğrulama isteği URI aşağıdaki parametreyi içerebilir:scope=openid%20profile%20email
- 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 kullanarakuserinfo_endpoint
meta veri değeri. Userınfo yanıt olarak tarif edilen kullanıcı hakkında bilgi içerir OpenID'yi iletişimeOpenID Connect Standard Claims
veclaims_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:
- Java için Google API'leri Müşteri Kütüphane
- Python için Google API'leri Müşteri Kütüphane
- .NET için Google API'leri Müşteri Kütüphane
- Ruby için Google API'leri Müşteri Kütüphane
- PHP için Google API'leri Müşteri Kütüphane
- Google Web Toolkit için OAuth 2.0 Kütüphane
- Mac OAuth için Google Araç Kutusu 2.0 Kontrolörler
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 ).