İstemci tarafı web uygulamaları için OAuth 2.0'ı kullanma

Bu dokümanda, erişim için OAuth 2.0 yetkilendirmesinin nasıl uygulanacağı açıklanmaktadır JavaScript web uygulamasından YouTube Data API'sı. OAuth 2.0, kullanıcıların Bir uygulamayla, kullanıcı adlarını, şifrelerini ve diğer bilgilerini muhafaza ederken belirli verileri paylaşabilir. gizlidir. Örneğin, bir uygulama izin almak için OAuth 2.0'ı kullanabilir verilerini alabilirsiniz.

Bu OAuth 2.0 akışı, dolaylı izin akışı olarak adlandırılır. Birlikte çalıştığım API'lere yalnızca kullanıcı uygulamadayken erişen uygulamalar. Bu uygulamalarının gizli bilgileri saklaması mümkün değildir.

Bu akışta, uygulamanız uygulamanızı tanımlamak için sorgu parametreleri kullanan bir Google URL'si açar. ve uygulamanın gerektirdiği API erişimi türünü içerir. URL'yi geçerli tarayıcıda açabilirsiniz bir pencere veya pop-up. Kullanıcı, Google ile kimlik doğrulaması yapabilir ve istenen izinleri verebilir. Ardından Google, kullanıcıyı uygulamanıza geri yönlendirir. Yönlendirme, uygulamanızı doğrular ve ardından API isteklerinde bulunmak için kullanır.

Google API'leri İstemci Kitaplığı ve Google Kimlik Hizmetleri

JavaScript için Google API'leri istemci kitaplığı kullanıyorsanız Google'a yetkili aramalar yapmak için OAuth 2.0 akışını yönetmek için Google Kimlik Hizmetleri'nin JavaScript kitaplığı. Lütfen Google'a bakın "Kimlik Hizmetleri" jeton modeli, ve OAuth 2.0 dolaylı izin akışını temel almaktadır.

Ön koşullar

Projeniz için API'leri etkinleştirin

Google API'lerini çağıran herhangi bir uygulamanın, bu API'ları API Console

Projenizde bir API'yi etkinleştirmek için:

  1. Open the API Library Google API Console.
  2. If prompted, select a project, or create a new one.
  3. YouTube Data API'yi bulup etkinleştirmek için Kitaplık sayfasını kullanın. Uygulamanızın kullanacağı diğer API'leri bulun ve bunları da etkinleştirin.

Yetkilendirme kimlik bilgileri oluşturma

Google API'lerine erişmek için OAuth 2.0 kullanan tüm uygulamaların yetkilendirme kimlik bilgilerine sahip olması gerekir kimliği tanımlayabileceksiniz. Aşağıdaki adımlarda, projenizin kimlik bilgilerini oluşturmalarını sağlar. Böylece uygulamalarınız kimlik bilgilerini kullanarak API'lere erişebilir bilgileri görürsünüz.

  1. Go to the Credentials page.
  2. Kimlik bilgisi oluştur > OAuth istemci kimliği seçeneğini tıklayın.
  3. Web uygulaması uygulama türünü seçin.
  4. Formu doldurun. Yetkilendirilmiş Google API istekleri yapmak için JavaScript kullanan uygulamalar yetkili JavaScript kaynaklarını belirtmelidir. Kaynaklar, uygulamanızın OAuth 2.0 sunucusuna istek gönderebileceği bir kod snippet'i ekleyin. Bu kaynaklar şunlara uymalıdır: Google'ın doğrulama kurallarına göre ayarlayın.

Erişim kapsamlarını tanımlama

Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim istemesini sağlarken aynı zamanda da Böylece kullanıcılar, uygulamanıza izin verdikleri erişim miktarını kontrol edebilir. Böylece, talep edilen kapsamların sayısı ile gerçekleşme olasılığı arasında ters bir ilişki Kullanıcı izni alma.

OAuth 2.0 yetkilendirmesini uygulamaya başlamadan önce kapsamları tanımlamanızı öneririz. uygulamanızın erişim izni olması gerekir.

YouTube Data API v3'te aşağıdaki kapsamlar kullanılır:

Nişan dürbünleri
https://www.googleapis.com/auth/youtubeYouTube hesabınızı yönetin
https://www.googleapis.com/auth/youtube.channel-memberships.creatorMevcut etkin kanal üyelerinizin listesini, geçerli düzeylerini ve ne zaman üye olduklarını görme
https://www.googleapis.com/auth/youtube.force-sslYouTube videolarınızı, derecelendirmelerinizi, yorumlarınızı ve altyazılarınızı görün, düzenleyin ve kalıcı olarak silin
https://www.googleapis.com/auth/youtube.readonlyYouTube hesabınızı görüntüleyin
https://www.googleapis.com/auth/youtube.uploadYouTube videolarınızı yönetin
https://www.googleapis.com/auth/youtubepartnerYouTube'daki varlıklarınızı ve ilişkili içeriği görüntüleyin ve yönetin
https://www.googleapis.com/auth/youtubepartner-channel-auditBir YouTube iş ortağı ile denetim süreci sırasında alakalı olan, YouTube kanalınıza ait gizli bilgileri görüntüleyin

OAuth 2.0 API Kapsamları dokümanı, Google API'lerine erişmek için kullanabileceğiniz kapsamların listesini görebilirsiniz.

OAuth 2.0 erişim jetonları alma

Aşağıdaki adımlarda uygulamanızın, Google OAuth 2.0 sunucusuyla nasıl etkileşimde bulunduğunu Kullanıcı adına API isteği gerçekleştirmek için kullanıcının izni. Uygulamanızda bu özellik bulunmalıdır kullanıcı yetkilendirmesi gerektiren bir Google API isteğini yürütmeden önce izin vermesi gerekir.

1. Adım: Google'ın OAuth 2.0 sunucusuna yönlendirin

Kullanıcının verilerine erişim izni istemek için kullanıcıyı Google'ın OAuth 2.0'a yönlendirin sunucu.

OAuth 2.0 Uç Noktaları

Şu adresteki Google OAuth 2.0 uç noktasından erişim istemek için bir URL oluşturun: https://accounts.google.com/o/oauth2/v2/auth Bu uç noktaya HTTPS üzerinden erişilebilir; düz HTTP bağlantıları reddedilir.

Google yetkilendirme sunucusu, web için aşağıdaki sorgu dizesi parametrelerini destekler sunucu uygulamaları:

Parametreler
client_id Zorunlu

Uygulamanızın istemci kimliği. Bu değeri API Console Credentials page.

redirect_uri Zorunlu

Kullanıcı şunu tamamladıktan sonra API sunucusunun kullanıcıyı nereye yönlendireceğini belirler: yetkilendirme akışı. Değer, İstemcinizin API Console Credentials page. Bu değer Sağlanan client_id için yetkili yönlendirme URI'si redirect_uri_mismatch hata.

http veya https şeması, büyük/küçük harf ve sondaki eğik çizgiye dikkat edin ("/") tümüyle eşleşmelidir.

response_type Zorunlu

JavaScript uygulamalarının parametrenin değerini token olarak ayarlaması gerekir. Bu değeri, Google Yetkilendirme Sunucusu'na erişim jetonunu bir name=value parçanın bulunduğu URI'nın (#) parça tanımlayıcısında Kullanıcı, yetkilendirme işlemini tamamladıktan sonra yönlendirilir.

scope Zorunlu

CEVAP boşlukla ayrılmış uygulamanızın erişebileceği kaynakları tanımlayan temsil eder. Bu değerler, Google'ın belirtir.

Kapsamlar, uygulamanızın yalnızca ihtiyaç duyduğu kaynaklara erişim istemesini sağlar aynı zamanda kullanıcıların, uygulamanıza erişebilecekleri erişim miktarını kontrol etmelerine de bir uygulamadır. Dolayısıyla, talep edilen kapsamların sayısı arasında ters bir ilişki vardır ve kullanıcının izin alma olasılığı bulunur.

YouTube Data API v3'te aşağıdaki kapsamlar kullanılır:

Nişan dürbünleri
https://www.googleapis.com/auth/youtubeYouTube hesabınızı yönetin
https://www.googleapis.com/auth/youtube.channel-memberships.creatorMevcut etkin kanal üyelerinizin listesini, geçerli düzeylerini ve ne zaman üye olduklarını görme
https://www.googleapis.com/auth/youtube.force-sslYouTube videolarınızı, derecelendirmelerinizi, yorumlarınızı ve altyazılarınızı görün, düzenleyin ve kalıcı olarak silin
https://www.googleapis.com/auth/youtube.readonlyYouTube hesabınızı görüntüleyin
https://www.googleapis.com/auth/youtube.uploadYouTube videolarınızı yönetin
https://www.googleapis.com/auth/youtubepartnerYouTube'daki varlıklarınızı ve ilişkili içeriği görüntüleyin ve yönetin
https://www.googleapis.com/auth/youtubepartner-channel-auditBir YouTube iş ortağı ile denetim süreci sırasında alakalı olan, YouTube kanalınıza ait gizli bilgileri görüntüleyin

OAuth 2.0 API Kapsamları belgesi, Google API'lerine erişmek için kullanabileceğiniz kapsamların tam listesi.

Uygulamanızın yetkilendirme kapsamlarına bağlam içinde erişim isteğinde bulunmasını öneririz kullanmanızı öneririz. Kullanıcı verilerine bağlam içinde erişim isteğinde bulunarak ek yetkilendirme gibi ek özelliklerden yararlanarak kullanıcıların uygulamanızın istediği erişime neden ihtiyaç duyduğunu iyi anlayabilirsiniz.

state Önerilen

Uygulamanızın, yetkilendirme sunucusunun yanıtıyla birlikte çalışır. Sunucu,name=value URL parçası tanımlayıcısı (#) redirect_uri kullanıcı uygulamanızı kabul ettikten veya reddettikten sonra erişim isteği.

Bu parametreyi, kullanıcıyı web sitesine yönlendirmek gibi çeşitli amaçlar için kullanabilirsiniz. uygulamanızda doğru kaynağı kullanma, nonce gönderme ve siteler arası isteği azaltma Sahtekarlık. redirect_uri metriğiniz tahmin edilebildiğinden state kullanılarak değeri, gelen bir bağlantının bir bağlantı durumu ya da kötü amaçlı yazılım Kimlik doğrulama isteği. Rastgele bir dize oluşturursanız veya bir çerezin karmasını ya da durumunu yakalayan başka bir değerle yanıtı doğrulayarak Ayrıca istek ve yanıtın aynı tarayıcıdan kaynaklandığından emin olun. gibi saldırılara karşı koruma sağlayarak siteler arası istek sahtecilik. Bkz. Keşif Bağlantısı state jetonunun nasıl oluşturulacağı ve onaylanacağıyla ilgili örnek dokümanları inceleyin.

include_granted_scopes İsteğe bağlı

Uygulamaların ek erişim istemek için artımlı yetkilendirme kullanmasını sağlar irdeleyelim. Bu parametrenin değerini true olarak ayarlarsanız ve verilirse yeni erişim jetonu, yetkilendirme isteği kapsamındaki tüm kapsamları da Kullanıcı daha önce uygulamaya erişim izni verdi. Bkz. artımlı yetkilendirme bölümüne bakın.

login_hint İsteğe bağlı

Uygulamanız hangi kullanıcının kimlik doğrulaması yapmaya çalıştığını biliyorsa bu parametreyi kullanabilir Google Kimlik Doğrulama Sunucusu'na bir ipucu sağlamak için kullanılır. Sunucu, bu ipucunu oturum açma formundaki e-posta alanını önceden doldurarak veya uygun çoklu giriş oturumunu seçin.

Parametre değerini bir e-posta adresi veya sub tanımlayıcısına ayarlayın. kullanıcının Google Kimliğine eşdeğer olmalıdır.

prompt İsteğe bağlı

Kullanıcıya sunmak için kullanılan, boşlukla ayrılmış, büyük/küçük harfe duyarlı bir istem listesi. Şunu yapmazsanız: bu parametreyi belirtirseniz kullanıcıdan yalnızca projenizde ilk erişim izni ister. Bkz. Daha fazla bilgi için yeniden izin isteniyor.

Olası değerler:

none Herhangi bir kimlik doğrulama veya izin ekranı göstermeyin. Şunlarla belirtilmemelidir: değerlerdir.
consent Kullanıcıdan izin isteyin.
select_account Kullanıcıdan hesap seçmesini isteyin.

Google'ın yetkilendirme sunucusuna örnek yönlendirme

Aşağıda, okunabilirlik için satır sonları ve boşluklar içeren örnek bir URL gösterilmiştir. URL istekleri kullanıcının YouTube verilerine erişim izni veren bir kapsama erişebilir. Artımlı yaklaşım yeni erişim jetonunun bulunduğundan emin olmak için yetkilendirme (include_granted_scopes=true) kullanıcının daha önce uygulama erişimi verdiği tüm kapsamları kapsar. Birkaç başka parametreleri de örnek olarak belirtilmiştir.

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl&
 include_granted_scopes=true&
 response_type=token&
 state=state_parameter_passthrough_value&
 redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback&
 client_id=client_id

İstek URL'sini oluşturduktan sonra kullanıcıyı bu URL'ye yönlendirin.

JavaScript örnek kodu

Aşağıdaki JavaScript snippet'i, JavaScript için Google API'leri İstemci Kitaplığı kullanmadan JavaScript. Bu OAuth sürümünden itibaren 2.0 uç noktası, Kaynaklar Arası Kaynak Paylaşımı'nı (CORS) desteklemez. Snippet, bir formunu doldurun.

/*
 * Create form to request access token from Google's OAuth 2.0 server.
 */
function oauthSignIn() {
  // Google's OAuth 2.0 endpoint for requesting an access token
  var oauth2Endpoint = 'https://accounts.google.com/o/oauth2/v2/auth';

  // Create <form> element to submit parameters to OAuth 2.0 endpoint.
  var form = document.createElement('form');
  form.setAttribute('method', 'GET'); // Send as a GET request.
  form.setAttribute('action', oauth2Endpoint);

  // Parameters to pass to OAuth 2.0 endpoint.
  var params = {'client_id': 'YOUR_CLIENT_ID',
                'redirect_uri': 'YOUR_REDIRECT_URI',
                'response_type': 'token',
                'scope': 'https://www.googleapis.com/auth/youtube.force-ssl',
                'include_granted_scopes': 'true',
                'state': 'pass-through value'};

  // Add form parameters as hidden input values.
  for (var p in params) {
    var input = document.createElement('input');
    input.setAttribute('type', 'hidden');
    input.setAttribute('name', p);
    input.setAttribute('value', params[p]);
    form.appendChild(input);
  }

  // Add form to page and submit it to open the OAuth 2.0 endpoint.
  document.body.appendChild(form);
  form.submit();
}

2. adım: Google, kullanıcıdan izin ister

Bu adımda kullanıcı, uygulamanıza istenen erişimi verip vermeyeceğini belirler. Burada aşamasında, Google, uygulamanızın adını ve Google API'sini gösteren bir izin penceresi ve hizmetlerin kullanılabilmesi için gereken izinleri . İlgili içeriği oluşturmak için kullanılan daha sonra kullanıcı, uygulamanız tarafından istenen bir veya daha fazla kapsama erişim izni verebilir ya da isteği reddetmelidir.

Başvurunuzun sizden yanıt almayı beklediği için bu aşamada herhangi bir işlem yapması gerekmez. Google'ın, herhangi bir erişim izni verilip verilmediğini gösteren OAuth 2.0 sunucusu. Bu yanıtın açıklaması adım adım anlatacağız.

Hatalar

Google'ın OAuth 2.0 yetkilendirme uç noktasına gönderilen istekler, kullanıcılara yönelik hata mesajları gösterebilir. ile başlar. Sık karşılaşılan hata kodları ve önerilenler aşağıda listelenmiştir.

admin_policy_enforced

Google Hesabı, şu politikaları nedeniyle istenen bir veya daha fazla kapsamı yetkilendiremedi: Google Workspace yöneticilerine ulaşın. Google Workspace Yöneticisi yardım makalesine göz atın Hangi üçüncü taraf ve üçüncü taraf Dahili uygulamaların Google Workspace verilerine erişmesi veya bir yöneticinin tüm kapsamlara ya da hassas ve gizli erişim OAuth istemci kimliğinize açıkça erişim verilene kadar kısıtlanan kapsamları kısıtlamayın.

disallowed_useragent

Yetkilendirme uç noktası, Google'ın OAuth 2.0 Politikaları.

Android

Android geliştiricileri, android.webkit.WebView. Geliştiriciler bunun yerine Android için Google ile Oturum Açma veya COPPA Vakfı'nın Android için AppAuth

Bir Android uygulaması genel bir web bağlantısını açtığında, web geliştiricileri bu hatayla karşılaşabilir. Google'ın OAuth 2.0 yetkilendirme uç noktasına giden bir kullanıcıyı otomatik olarak sitenizi ziyaret edin. Geliştiriciler, genel bağlantıların her iki türü de içeren işletim sistemi Android Uygulama Bağlantıları işleyicileri veya varsayılan tarayıcı uygulamasını kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan Android Özel Sekmeleri desteklenen bir seçenektir.

iOS

iOS ve macOS geliştiricileri, şurada yetkilendirme isteklerini açarken bu hatayla karşılaşabilir: WKWebView. Geliştiriciler bunun yerine şunun gibi iOS kitaplıklarını kullanmalıdır: iOS için Google ile Oturum Açma veya COPPA Vakfı'nın iOS için AppAuth

Web geliştiricileri, iOS veya macOS uygulaması Google'ın OAuth 2.0 yetkilendirme uç noktasına giden bir kullanıcı otomatik olarak sitenizi ziyaret edin. Geliştiriciler, genel bağlantıların her iki türü de içeren işletim sistemi Geçiş Bağlantıları işleyicileri veya varsayılan tarayıcı uygulamasını kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan SFSafariViewController desteklenen bir seçenektir.

org_internal

İstekteki OAuth istemci kimliği, belirli Google Cloud Kuruluşu. Bu yapılandırma seçeneği hakkında daha fazla bilgi için Kullanıcı türü "OAuth izin ekranınızı ayarlama başlıklı yardım makalesini inceleyebilirsiniz.

invalid_client

İsteğin yapıldığı kaynak, bu istemci için yetkilendirilmemiş. Görüntüleyin origin_mismatch

invalid_grant

Ekli yetkilendirme kullanılırken jetonun süresi dolmuş olabilir veya geçersiz kılındıysa. Kullanıcının kimliğini tekrar doğrulayın ve yeni jetonlar almak için kullanıcıdan izin isteyin. Devam ediyorsanız görmek için uygulamanızın doğru yapılandırıldığından ve kullanarak istekte bulunabilirsiniz. Aksi takdirde, kullanıcı hesabında silinmiş veya devre dışı bırakılmış olabilir.

origin_mismatch

Yetkilendirme isteğini gönderen JavaScript'in şeması, alan adı ve/veya bağlantı noktası; OAuth istemci kimliği için kayıtlı yetkili bir JavaScript kaynak URI'siyle eşleşmelidir. İncelemeye yetki verildi Google API Consoleiçindeki JavaScript kaynakları Credentials page.

redirect_uri_mismatch

Yetkilendirme isteğinde iletilen redirect_uri, yetkili bir kuruluşla eşleşmiyor OAuth istemci kimliğinin yönlendirme URI'si. Şuradaki yetkili yönlendirme URI'lerini inceleyin: Google API Console Credentials page

Yetkilendirme isteğini gönderen JavaScript'in şeması, alan adı ve/veya bağlantı noktası; OAuth istemci kimliği için kayıtlı yetkili bir JavaScript kaynak URI'siyle eşleşmelidir. İnceleyin yetkili JavaScript kaynaklarını Google API Console Credentials page

redirect_uri parametresi, desteği sonlandırıldı ve artık desteklenmiyor. Daha fazla bilgi için taşıma rehberi inceleyebilirsiniz.

invalid_request

Talebinizle ilgili bir sorun oluştu. Bunun birkaç nedeni olabilir:

  • İstek düzgün biçimlendirilmemiş
  • İstekte gerekli parametreler eksikti
  • İstek, Google'ın desteklemediği bir yetkilendirme yöntemi kullanıyor. OAuth'unuzu doğrulayın entegrasyonun önerilen bir entegrasyon yöntemi kullanması

3. Adım: OAuth 2.0 sunucu yanıtını yönetin

OAuth 2.0 Uç Noktaları

OAuth 2.0 sunucusu,redirect_uri erişim jetonu isteği.

Kullanıcı isteği onaylarsa yanıt bir erişim jetonu içerir. Kullanıcı isteği onaylamazsa yanıtta hata mesajı gösterilir. Erişim jetonu veya hata mesajı aşağıda gösterildiği gibi yönlendirme URI'sinin karma parçasında döndürülür:

  • Erişim jetonu yanıtı:

    https://oauth2.example.com/callback#access_token=4/P7q7W91&token_type=Bearer&expires_in=3600

    access_token parametresine ek olarak parça dizesi de her zaman şuna ayarlı token_type parametresini içerir: Bearer ve expires_in parametresi, jetonun kullanım süresi (saniye cinsinden). state parametresi belirtildiyse isteğine dahil edilirse bu koşulun değeri yanıta da dahil edilir.

  • Hata yanıtı:
    https://oauth2.example.com/callback#error=access_denied

Örnek OAuth 2.0 sunucu yanıtı

Aşağıdaki örnek URL'yi tıklayarak bu akışı test edebilirsiniz. URL'de Google Drive'ınızdaki dosyaların meta verilerini görüntülemek için salt okuma erişimi:

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.force-ssl&
 include_granted_scopes=true&
 response_type=token&
 state=state_parameter_passthrough_value&
 redirect_uri=http%3A%2F%2Flocalhost%2Foauth2callback&
 client_id=client_id

OAuth 2.0 akışını tamamladıktan sonra şuraya yönlendirileceksiniz: http://localhost/oauth2callback Bu URL, 404 NOT FOUND hatası yalnızca yerel makineniz bir dosyayı bu adrese gidin. Bir sonraki adım, Kullanıcı tekrar uygulamanıza yönlendirildiğinde gösterilecek URI.

Google API'lerini çağırma

OAuth 2.0 Uç Noktaları

Uygulamanız bir erişim jetonu aldıktan sonra, bu jetonu kullanarak bir Google Belirli bir kullanıcı adına API kullanıcı hesabı(API'nin gerektirdiği erişim kapsamları verildiyse) ile birlikte çalışır. Bunu yapmak için API'ye yapılan bir istekte, access_token sorgusu ekleyerek erişim jetonunu parametresi veya Authorization HTTP başlığı Bearer değeri olabilir. Mümkünse HTTP üstbilgisi tercih edilir, çünkü sorgu dizeleri sunucu günlüklerinde görünür olma eğilimindedir. Çoğu zaman Google API'lerine yapılan çağrılarınızı ayarlamak için bir istemci kitaplığı kullanabilirsiniz (örneğin, YouTube Live Streaming API'yi çağırma).

YouTube Live Streaming API, hizmet hesabı akışını desteklemez. Bu tarihten beri bir Hizmet Hesabı'nı bir YouTube hesabına bağlamanın bir yolu yoktur. İstekleri bu hesapla yetkilendirmeye çalışır akışı NoLinkedYouTubeAccount hatası oluşturur.

Tüm Google API'lerini deneyebilir ve kapsamlarını şuradan görüntüleyebilirsiniz: OAuth 2.0 Playground (OAuth 2.0 Oyun Alanı).

HTTP GET örnekleri

Bir liveBroadcasts.list Authorization: Bearer HTTP kullanan uç nokta (YouTube Live Streaming API) başlık aşağıdaki gibi görünebilir. Kendi erişim jetonunuzu belirtmeniz gerektiğini unutmayın:

GET /youtube/v3/liveBroadcasts?part=id%2Csnippet&mine=true HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

Aşağıda, kimliği doğrulanmış kullanıcı için aynı API'ye access_token kullanılarak yapılan bir çağrı verilmiştir. sorgu dizesi parametresi:

GET https://www.googleapis.com/youtube/v3/liveBroadcasts?access_token=access_token&part=id%2Csnippet&mine=true

curl örnek

Bu komutları curl komut satırı uygulamasıyla test edebilirsiniz. Bir HTTP üstbilgisi seçeneğini kullanan bir örnek (tercih edilen):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id%2Csnippet&mine=true

Alternatif olarak, sorgu dizesi parametre seçeneği şu şekildedir:

curl https://www.googleapis.com/youtube/v3/liveBroadcasts?access_token=access_token&part=id%2Csnippet&mine=true

JavaScript örnek kodu

Aşağıdaki kod snippet'i, bir isteği gönderin. Bu örnekte, JavaScript için Google API'leri İstemci Kitaplığı kullanılmaz. Ancak, istemci kitaplığını kullanmıyor olsanız bile Bu kütüphanenin belgelerindeki CORS destek rehberi size yardımcı olacaktır göz atabilirsiniz.

Bu kod snippet'inde access_token değişkeni, sahip olduğunuz jetonu temsil eder yetkili kullanıcı adına API isteklerinde bulunmak için. Tamamlanan example, tarayıcının yerel depolama alanında bu jetonun nasıl depolanacağını ve jetonun nasıl alınacağını gösterir lütfen unutmayın.

var xhr = new XMLHttpRequest();
xhr.open('GET',
    'https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id,snippet&mine=true' +
    'access_token=' + params['access_token']);
xhr.onreadystatechange = function (e) {
  console.log(xhr.response);
};
xhr.send(null);

Tam örnek

OAuth 2.0 Uç Noktaları

Bu kod örneğinde, JavaScript için Google API'leri İstemci Kitaplığı. Bu kod, bir düğmenin yer aldığı bir HTML sayfası için bir API isteği gönderin. Düğmeyi tıklarsanız kod, sayfada bir Tarayıcınızın yerel depolama alanındaki API erişim jetonu. Bu durumda, API isteğini yürütür. Aksi halde OAuth 2.0 akışını başlatır.

OAuth 2.0 akışı için sayfa şu adımları izler:

  1. Kullanıcıyı Google'ın OAuth 2.0 sunucusuna yönlendirir. Bu sunucu, https://www.googleapis.com/auth/youtube.force-ssl kapsamı.
  2. İstenen bir veya daha fazla kapsama erişim izni verdikten (veya reddettikten) sonra kullanıcı şuraya yönlendirilir: parça tanımlayıcısı dizesinden erişim jetonunu ayrıştıran orijinal sayfa.
  3. Sayfa, örnek API isteğinde bulunmak için erişim jetonunu kullanır.

    Bu API isteği, YouTube Data API'nin liveBroadcasts.list çağrısını yapıyor yöntemini kullanın.

  4. İstek başarıyla yürütülürse API yanıtı, tarayıcının hata ayıklama sayfasına kaydedilir konsolu.

Uygulamaya erişimi şuradan iptal edebilirsiniz: İzinler sayfası: Google Hesabı. Uygulama, Google API Dokümanları için OAuth 2.0 Demo olarak listelenir.

Bu kodu yerel olarak çalıştırmak istiyorsanız YOUR_CLIENT_ID ve YOUR_REDIRECT_URI sizin yetkilendirme kimlik bilgileri. YOUR_REDIRECT_URI değişkeni sayfanın sunulduğu URL'ye ayarlanmalıdır. Değer, şunlardan biriyle tam olarak eşleşmelidir: OAuth 2.0 istemcisi için, API Console Credentials pageEğer bu değer yetkili bir URI ile eşleşmezse bir redirect_uri_mismatch alırsınız hatası. Projeniz ayrıca Bu istek için uygun API'yi etkinleştirdiğinizden emin olun.

<html><head></head><body>
<script>
  var YOUR_CLIENT_ID = 'REPLACE_THIS_VALUE';
  var YOUR_REDIRECT_URI = 'REPLACE_THIS_VALUE';

  // Parse query string to see if page request is coming from OAuth 2.0 server.
  var fragmentString = location.hash.substring(1);
  var params = {};
  var regex = /([^&=]+)=([^&]*)/g, m;
  while (m = regex.exec(fragmentString)) {
    params[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
  }
  if (Object.keys(params).length > 0 && params['state']) {
    if (params['state'] == localStorage.getItem('state')) {
      localStorage.setItem('oauth2-test-params', JSON.stringify(params) );

      trySampleRequest();
    } else {
      console.log('State mismatch. Possible CSRF attack');
    }
  }

  // Function to generate a random state value
  function generateCryptoRandomState() {
    const randomValues = new Uint32Array(2);
    window.crypto.getRandomValues(randomValues);

    // Encode as UTF-8
    const utf8Encoder = new TextEncoder();
    const utf8Array = utf8Encoder.encode(
      String.fromCharCode.apply(null, randomValues)
    );

    // Base64 encode the UTF-8 data
    return btoa(String.fromCharCode.apply(null, utf8Array))
      .replace(/\+/g, '-')
      .replace(/\//g, '_')
      .replace(/=+$/, '');
  }

  // If there's an access token, try an API request.
  // Otherwise, start OAuth 2.0 flow.
  function trySampleRequest() {
    var params = JSON.parse(localStorage.getItem('oauth2-test-params'));
    if (params && params['access_token']) {
      var xhr = new XMLHttpRequest();
      xhr.open('GET',
          'https://www.googleapis.com/youtube/v3/liveBroadcasts?part=id,snippet&mine=true' +
          'access_token=' + params['access_token']);
      xhr.onreadystatechange = function (e) {
        if (xhr.readyState === 4 && xhr.status === 200) {
          console.log(xhr.response);
        } else if (xhr.readyState === 4 && xhr.status === 401) {
          // Token invalid, so prompt for user permission.
          oauth2SignIn();
        }
      };
      xhr.send(null);
    } else {
      oauth2SignIn();
    }
  }

  /*
   * Create form to request access token from Google's OAuth 2.0 server.
   */
  function oauth2SignIn() {
    // create random state value and store in local storage
    var state = generateCryptoRandomState();
    localStorage.setItem('state', state);

    // Google's OAuth 2.0 endpoint for requesting an access token
    var oauth2Endpoint = 'https://accounts.google.com/o/oauth2/v2/auth';

    // Create element to open OAuth 2.0 endpoint in new window.
    var form = document.createElement('form');
    form.setAttribute('method', 'GET'); // Send as a GET request.
    form.setAttribute('action', oauth2Endpoint);

    // Parameters to pass to OAuth 2.0 endpoint.
    var params = {'client_id': YOUR_CLIENT_ID,
                  'redirect_uri': YOUR_REDIRECT_URI,
                  'scope': 'https://www.googleapis.com/auth/youtube.force-ssl',
                  'state': state,
                  'include_granted_scopes': 'true',
                  'response_type': 'token'};

    // Add form parameters as hidden input values.
    for (var p in params) {
      var input = document.createElement('input');
      input.setAttribute('type', 'hidden');
      input.setAttribute('name', p);
      input.setAttribute('value', params[p]);
      form.appendChild(input);
    }

    // Add form to page and submit it to open the OAuth 2.0 endpoint.
    document.body.appendChild(form);
    form.submit();
  }
</script>

<button onclick="trySampleRequest();">Try sample request</button>
</body></html>

JavaScript kaynak doğrulama kuralları

Google, yardımcı olmak için JavaScript kaynaklarına aşağıdaki doğrulama kurallarını uygular uygulamalarını güvende tutmasını sağlar. JavaScript kaynaklarınız bu kurallara uygun olmalıdır. Şu ayrıntılar için RFC 3986 bölüm 3'e bakın: aşağıda açıklanmıştır.

Doğrulama kuralları
Şema

JavaScript kaynakları, düz HTTP değil, HTTPS şemasını kullanmalıdır. Yerel ana makine URI'leri (yerel ana makine IP adresi URI'leri dahil) bu kuraldan muaftır.

Düzenleyen

Ana makineler ham IP adresleri olamaz. Localhost IP adresleri bu kuraldan muaftır.

Alan
  • Ana makine TLD'leri (Üst Düzey Alanlar) genel son ek listesine ait olmalıdır.
  • Ana makine alan adları “googleusercontent.com” olamaz.
  • JavaScript kaynakları, URL kısaltıcı alan adları içeremez (ör. goo.gl) (alanın sahibi değilse)
  • Kullanıcı Bilgileri

    JavaScript kaynakları, kullanıcı bilgileri alt bileşenini içeremez.

    Yol

    JavaScript kaynakları, yol bileşenini içeremez.

    Sorgu

    JavaScript kaynakları sorgu bileşenini içeremez.

    Parça

    JavaScript kaynakları parça bileşeni içeremez.

    Karakterler JavaScript kaynakları, şunlar da dahil olmak üzere belirli karakterleri içeremez:
    • Joker karakterler ('*')
    • Yazdırılamayan ASCII karakterler
    • Yüzde kodlamaları geçersiz (URL kodlamasını izlemeyen herhangi bir yüzde kodlaması) ardından iki on altılı sayı içeren yüzde işareti biçiminde)
    • Boş karakterler (kodlanmış NULL karakteri, ör. %00, %C0%80)

    Artımlı yetkilendirme

    OAuth 2.0 protokolünde, uygulamanız kaynaklara erişim için yetkilendirme ister. kapsamlarla belirlenir. Yetkilendirme isteğinde bulunmak en iyi kullanıcı deneyimi uygulaması olarak kabul edilir. ihtiyaç duyduğunuz anda bulmanız gerekir. Bu uygulamayı etkinleştirmek için Google'ın yetkilendirme sunucusu, artımlı yetkilendirmeyi destekler. Bu özellik, gerektiğinde kapsamları istemenize olanak sağlar. kullanıcı yeni kapsam için izin verirse gerekebilecek bir yetkilendirme kodu kullanıcının projeye verdiği tüm kapsamları içeren bir jetonla takas edildi.

    Örneğin, bir uygulamanın kimliği doğrulanmış kullanıcının YouTube kanalına ait verileri aldığını ve ayrıca Kullanıcının YouTube Analytics verilerini özel bir akıştan almasını sağlar. Bu durumda, oturum zaman, uygulama yalnızca https://www.googleapis.com/auth/youtube.force-ssl cihazına erişim isteyebilir kapsam. Ancak kullanıcı kanalının Analytics verilerine erişmeye çalıştıysa uygulama da https://www.googleapis.com/auth/yt-analytics.readonly kapsamına erişim isteğinde bulunun.

    Aşağıdaki kurallar, artımlı yetkilendirmeden elde edilen bir erişim jetonu için geçerlidir:

    • Bu jeton, yeni ve birleştirilmiş yetkilendirmeyi kullanabilirsiniz.
    • Erişim jetonu almak amacıyla birleştirilmiş yetkilendirme için yenileme jetonunu kullandığınızda erişim jetonu, birleştirilmiş yetkilendirmeyi temsil eder ve Yanıta scope değer dahil edildi.
    • Birleştirilmiş yetkilendirme, kullanıcının API projesine verdiği tüm kapsamları ve ve bu bilgilerin farklı istemcilerden talep edilip edilmediğini kontrol edebilirsiniz. Örneğin, bir kullanıcı uygulamanın masaüstü istemcisini kullanarak bir kapsam ve ardından aynı kullanıcıya başka bir kapsam verildi uygulanması durumunda, birleştirilmiş yetkilendirme her iki kapsamı da kapsar.
    • Birleşik bir yetkilendirmeyi temsil eden bir jetonu iptal ederseniz tüm bunlara erişim ilişkilendirilmiş kullanıcı adına yetkilendirmenin kapsamları eşzamanlı olarak iptal edilir.

    Aşağıdaki kod örnekleri, mevcut bir erişim jetonuna kapsamların nasıl ekleneceğini gösterir. Bu yaklaşım sayesinde uygulamanızı kullanmanızı öneririz.

    OAuth 2.0 Uç Noktaları

    Bu örnekte, çağıran uygulama Kullanıcının erişebildiği diğer tüm erişimlere ek olarak izin vermiş olursunuz.

    Mevcut bir erişim jetonuna kapsam eklemek için include_granted_scopes dahil edin Google'ın OAuth 2.0 sunucusuna gönderilen isteğinizde parametresini içermelidir.

    Aşağıdaki kod snippet'i bunun nasıl yapılacağını göstermektedir. Snippet, büyük resmi depoladığınızı varsayar Tarayıcının yerel depolama alanında erişim jetonunuzun geçerli olduğu kapsamlar. ( complete example kodu, erişim jetonunun geldiği kapsamların bir listesini depolar tarayıcının yerel ayarında oauth2-test-params.scope özelliği ayarlanarak geçerli olur. storage.)

    Snippet, erişim jetonunun geçerli olduğu kapsamları kullanmak istediğiniz kapsamla karşılaştırır geçiş yapabilirsiniz. Erişim jetonu bu kapsamı içermiyorsa OAuth 2.0 akışı başlar. Burada, oauth2SignIn işlevi 2. Adım (ve bu adım tamamlanan örneğine bakın).

    var SCOPE = 'https://www.googleapis.com/auth/youtube.force-ssl';
    var params = JSON.parse(localStorage.getItem('oauth2-test-params'));
    
    var current_scope_granted = false;
    if (params.hasOwnProperty('scope')) {
      var scopes = params['scope'].split(' ');
      for (var s = 0; s < scopes.length; s++) {
        if (SCOPE == scopes[s]) {
          current_scope_granted = true;
        }
      }
    }
    
    if (!current_scope_granted) {
      oauth2SignIn(); // This function is defined elsewhere in this document.
    } else {
      // Since you already have access, you can proceed with the API request.
    }

    Jetonu iptal etme

    Bazı durumlarda, bir kullanıcı bir uygulamaya verilen erişimi iptal etmek isteyebilir. Kullanıcı erişimi iptal edebilir adresini ziyaret ederek Hesap Ayarları. Bkz. Kaldır Üçüncü taraf sitelerin site veya uygulama erişimi bölümü ve hesabınıza erişimi olan uygulamalar destek dokümanına bakın.

    Bir uygulamanın, kendisine verilen erişimi programlı olarak iptal etmesi de mümkündür. Programlı iptal etme, bir kullanıcının e-posta listesinden çıktığı, bir veya sonraki bir veya bir uygulamanın gerektirdiği API kaynakları önemli ölçüde değişmiştir. Başka bir deyişle, Kaldırma sürecinin bir bölümü, izinleri önceden sağlamak için bir API isteği içerebilir. kaldırılır.

    OAuth 2.0 Uç Noktaları

    Uygulamanız, bir jetonu programlı bir şekilde iptal etmek için https://oauth2.googleapis.com/revoke ve jetonu parametre olarak ekler:

    curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
            https://oauth2.googleapis.com/revoke?token={token}

    Bu jeton bir erişim jetonu veya yenileme jetonu olabilir. Jeton bir erişim jetonuysa ve bir yenileme jetonu varsa yenileme jetonu da iptal edilir.

    İptal işlemi başarıyla tamamlanırsa yanıtın HTTP durum kodu 200 Hata koşulları için 400 ile birlikte HTTP durum kodu döndürülür hata kodu içerir.

    Aşağıdaki JavaScript snippet'i, JavaScript için Google API'leri İstemci Kitaplığı. İptal işlemi için Google'ın OAuth 2.0 uç noktasından itibaren jetonlar Arası Kaynak Paylaşımı'nı (CORS) desteklemiyorsa, kod bir form oluşturur ve göndermek için XMLHttpRequest() yöntemini kullanmak yerine formu uç noktaya isteği gönderin.

    function revokeAccess(accessToken) {
      // Google's OAuth 2.0 endpoint for revoking access tokens.
      var revokeTokenEndpoint = 'https://oauth2.googleapis.com/revoke';
    
      // Create <form> element to use to POST data to the OAuth 2.0 endpoint.
      var form = document.createElement('form');
      form.setAttribute('method', 'post');
      form.setAttribute('action', revokeTokenEndpoint);
    
      // Add access token to the form so it is set as value of 'token' parameter.
      // This corresponds to the sample curl request, where the URL is:
      //      https://oauth2.googleapis.com/revoke?token={token}
      var tokenField = document.createElement('input');
      tokenField.setAttribute('type', 'hidden');
      tokenField.setAttribute('name', 'token');
      tokenField.setAttribute('value', accessToken);
      form.appendChild(tokenField);
    
      // Add form to page and submit it to actually revoke the token.
      document.body.appendChild(form);
      form.submit();
    }