Bu belgede, web sunucusu uygulamalarının Google API İstemci Kitaplıkları veya Google Erişim için OAuth 2.0 yetkilendirmesini uygulayacak OAuth 2.0 uç noktaları Google API'leri
OAuth 2.0, kullanıcıların belirli verileri bir uygulamayla paylaşmasına olanak tanırken kullanıcı adlarını, şifreleri ve diğer bilgileri gizli tutabilirsiniz. Örneğin, bir uygulama OAuth 2.0'ı kullanarak şuradan izin alabilir: kullanıcıların Google Drive'larında dosya depolamasına izin verir.
Bu OAuth 2.0 akışı, özel olarak kullanıcı yetkilendirmesi içindir. Uygulamalar için tasarlanmıştır gizli bilgileri depolayabilen ve durum kontrolü yapabilen bir sistemdir. Uygun şekilde yetkilendirilmiş bir web sunucusu Uygulama, kullanıcı uygulamayla etkileşimde bulunurken veya kullanıcı sonrasında bir API'ye erişebilir uygulamadan ayrıldı.
Web sunucusu uygulamaları sıklıkla ayrıca hizmet hesapları'nı (özellikle de erişim için Cloud API'lerini çağırırken) API isteklerini yetkilendirmek için proje temelli verileri kullanır. Web sunucusu uygulamaları hizmeti kullanabilir ve kullanıcı yetkilendirmesi ile bağlantılı şekilde hesaplanabilir.
İstemci kitaplıkları
Bu sayfadaki dile özgü örnekler, Uygulanacak Google API İstemci Kitaplıkları OAuth 2.0 yetkilendirmesi. Kod örneklerini çalıştırmak için önce istemci kitaplığını kullanabilirsiniz.
Uygulamanızın OAuth 2.0 akışını işlemek için bir Google API İstemci Kitaplığı kullandığınızda, istemci kitaplığının, uygulamanın normalde kendi başına yapması gereken birçok işlemi gerçekleştirir. Örneğin, yapılandırmanın yanı sıra uygulamanın depolanan erişim jetonlarını ne zaman kullanabileceğini veya yenileyeceğini belirler. Uygulamanın yeniden izin alması gerektiğinde. İstemci kitaplığı da doğru yönlendirme oluşturur URL'leri destekler ve erişim jetonları için yetkilendirme kodları değiş tokuşu yapan yönlendirme işleyicilerin uygulanmasına yardımcı olur.
Sunucu tarafı uygulamalar için Google API İstemci Kitaplıkları aşağıdaki dillerde kullanılabilir:
ziyaret edin.Ö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:
- Open the API Library Google API Console.
- If prompted, select a project, or create a new one.
- API Library , mevcut tüm API'leri ürüne göre gruplandırılmış olarak listeler. ve ne kadar popüler olduğunu öğreneceğiz. Etkinleştirmek istediğiniz API listede görünmüyorsa aramayı kullanarak öğesini bulabilir veya ait olduğu ürün ailesinde Tümünü Göster'i tıklayabilirsiniz.
- Etkinleştirmek istediğiniz API'yi seçin ve Etkinleştir düğmesini tıklayın.
- If prompted, enable billing.
- If prompted, read and accept the API's Terms of Service.
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.
- Go to the Credentials page.
- Kimlik bilgisi oluştur > OAuth istemci kimliği seçeneğini tıklayın.
- Web uygulaması uygulama türünü seçin.
- Formu doldurun ve Oluştur'u tıklayın. Dil ve çerçeve kullanan uygulamalar
.PHP, Java, Python, Ruby ve .NET gibi .NET kodları, yetkili yönlendirme URI'lerini belirtmelidir. İlgili içeriği oluşturmak için kullanılan
yönlendirme URI'leri, OAuth 2.0 sunucusunun yanıt gönderebileceği uç noktalardır. Bu
uç noktaların Google'ın doğrulama kurallarına uygun olması gerekir.
Test için, yerel makineye başvuruda bulunan URI'lar belirtebilirsiniz. Örneğin,
http://localhost:8080
Bunu aklınızda bulundurarak bu dokümandaki örneklerde yönlendirme URI'si olarakhttp://localhost:8080
kullanılmaktadır.Uygulamanızın kimlik doğrulama uç noktalarını tasarlamanızı öneririz. diğer kaynaklara yetkilendirme kodlarını göstermediğinden emin olmak için sayfasını ziyaret edin.
Kimlik bilgilerinizi oluşturduktan sonra şuradan client_secret.json dosyasını indirin. API Console. Dosyayı yalnızca uygulamanızın hangi verilere erişebileceğini kontrol edin.
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.
Uygulamanızın, bir artımlı yetkilendirme süreci kapsamında Kullanıcı verilerine bağlam içinde erişmek ister. Bu en iyi uygulama, kullanıcıların uygulamanızın istediği erişime neden ihtiyaç duyduğunu öğrenin.
OAuth 2.0 API Kapsamları dokümanı, Google API'lerine erişmek için kullanabileceğiniz kapsamların listesini görebilirsiniz.
Dile özgü gereksinimler
Bu dokümandaki kod örneklerinden herhangi birini çalıştırmak için bir Google hesabına, İnternet ve web tarayıcısı. API istemci kitaplıklarından birini kullanıyorsanız şuraya da bakın: aşağıdaki dile özgü şartları inceleyin.
PHP
Bu dokümandaki PHP kod örneklerini çalıştırmak için gerekenler:
- Komut satırı arayüzü (KSA) ve JSON uzantısı yüklü olarak PHP 5.6 veya sonraki sürümler.
- Composer bağımlılık yönetimi aracı.
-
PHP için Google API'leri İstemci Kitaplığı:
composer require google/apiclient:^2.10
Python
Bu belgedeki Python kod örneklerini çalıştırmak için gerekenler:
- Python 2.6 veya sonraki sürümler
- pip paket yönetim aracı.
- Python için Google API'leri İstemci Kitaplığı:
pip install --upgrade google-api-python-client
. google-auth
,google-auth-oauthlib
ve Kullanıcı yetkilendirmesi içingoogle-auth-httplib2
.pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
- Flask Python web uygulaması çerçevesi.
pip install --upgrade flask
requests
HTTP kitaplığı.pip install --upgrade requests
Ruby
Bu belgedeki Ruby kod örneklerini çalıştırmak için gerekenler:
- Ruby 2.6 veya sonraki sürümler
-
Ruby için Google Kimlik Doğrulama Kitaplığı:
gem install googleauth
-
Sinatra Ruby web uygulaması çerçevesi.
gem install sinatra
Node.js
Bu dokümanda Node.js kod örneklerini çalıştırmak için gerekenler:
- Bakım LTS'si, etkin LTS veya Node.js'nin mevcut sürümü.
-
Google API'leri Node.js İstemcisi:
npm install googleapis crypto express express-session
HTTP/REST
OAuth 2.0'ı doğrudan çağırabilmek için herhangi bir kitaplık yüklemeniz gerekmez. uç noktalar.
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.
Aşağıdaki listede bu adımlar hızlı bir şekilde özetlenmektedir:
- Uygulamanız gereken izinleri belirler.
- Uygulamanız, kullanıcıyı istenen izin verir.
- Uygulamanıza izin verip vermeyeceğinize kullanıcı karar verir.
- Uygulamanız, kullanıcının neye karar verdiğini öğrenir.
- Kullanıcı istenen izinleri verdiyse uygulamanız Kullanıcı adına API isteklerinde bulunma.
1. Adım: Yetkilendirme parametrelerini ayarlayın
İlk adımınız, yetkilendirme isteği oluşturmaktır. Bu istek, Uygulamanızı tanımlamak ve kullanıcıdan kullanıcıya vermesi istenen izinleri tanımlamak en iyi yoludur.
- OAuth 2.0 kimlik doğrulama ve yetkilendirmesi için Google istemci kitaplığı kullanıyorsanız bu parametreleri tanımlayan bir nesne oluşturup yapılandırın.
- Google OAuth 2.0 uç noktasını doğrudan çağırırsanız bir URL oluşturur ve parametrelerini dahil eder.
Aşağıdaki sekmeler, web sunucusu uygulamaları için desteklenen yetkilendirme parametrelerini tanımlar. İlgili içeriği oluşturmak için kullanılan dile özgü örnekler, bir istemci kitaplığının veya yetkilendirme kitaplığının bu parametreleri ayarlayan bir nesneyi yapılandırabilirsiniz.
PHP
Aşağıdaki kod snippet'i bir Google\Client()
nesnesi oluşturur. Bu nesne
parametrelerini belirtin.
Bu nesne client_secret.json dosyanızdaki bilgileri kullanarak
bir uygulamadır. (Daha fazla bilgi için yetkilendirme kimlik bilgileri oluşturma bölümüne bakın)
tıklayın.) Nesne, uygulamanızın izin istediği kapsamları da tanımlar
ve uygulamanızın kimlik doğrulama uç noktasına giden URL'yi eklemeniz gerekir. Bu uç nokta,
Google'ın OAuth 2.0 sunucusu. Son olarak, kod, isteğe bağlı access_type
ve
include_granted_scopes
parametre
Örneğin, bu kod bir kullanıcının Google Drive:
$client = new Google\Client(); // Required, call the setAuthConfig function to load authorization credentials from // client_secret.json file. $client->setAuthConfig('client_secret.json'); // Required, to set the scope value, call the addScope function $client->addScope(Google\Service\Drive::DRIVE_METADATA_READONLY); // Required, call the setRedirectUri function to specify a valid redirect URI for the // provided client_id $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'); // Recommended, offline access will give you both an access and refresh token so that // your app can refresh the access token without user interaction. $client->setAccessType('offline'); // Recommended, call the setState function. Using a state value can increase your assurance that // an incoming connection is the result of an authentication request. $client->setState($sample_passthrough_value); // Optional, if your application knows which user is trying to authenticate, it can use this // parameter to provide a hint to the Google Authentication Server. $client->setLoginHint('hint@example.com'); // Optional, call the setPrompt function to set "consent" will prompt the user for consent $client->setPrompt('consent'); // Optional, call the setIncludeGrantedScopes function with true to enable incremental // authorization $client->setIncludeGrantedScopes(true);
Python
Aşağıdaki kod snippet'i google-auth-oauthlib.flow
modülünü kullanarak
belirtin.
Bu kod, şunu kullanarak uygulamanızı tanımlayan bir Flow
nesnesi oluşturur:
sonra indirdiğiniz client_secret.json dosyasındaki bilgiler
yetkilendirme kimlik bilgileri oluşturma. Bu nesne,
izin verdiği kapsamları ve uygulamanızın URL'sini
auth uç noktası aracılığıyla gönderilir. Son olarak,
isteğe bağlı access_type
ve include_granted_scopes
parametrelerini ayarlar.
Örneğin, bu kod bir kullanıcının Google Drive:
import google.oauth2.credentials import google_auth_oauthlib.flow # Required, call the from_client_secrets_file method to retrieve the client ID from a # client_secret.json file. The client ID (from that file) and access scopes are required. (You can # also use the from_client_config method, which passes the client configuration as it originally # appeared in a client secrets file but doesn't access the file itself.) flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( 'client_secret.json', scopes=['https://www.googleapis.com/auth/drive.metadata.readonly']) # Required, indicate where the API server will redirect the user after the user completes # the authorization flow. The redirect URI is required. The value must exactly # match one of the authorized redirect URIs for the OAuth 2.0 client, which you # configured in the API Console. If this value doesn't match an authorized URI, # you will get a 'redirect_uri_mismatch' error. flow.redirect_uri = 'https://www.example.com/oauth2callback' # Generate URL for request to Google's OAuth 2.0 server. # Use kwargs to set optional request parameters. authorization_url, state = flow.authorization_url( # Recommended, enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Optional, enable incremental authorization. Recommended as a best practice. include_granted_scopes='true', # Optional, if your application knows which user is trying to authenticate, it can use this # parameter to provide a hint to the Google Authentication Server. login_hint='hint@example.com', # Optional, set prompt to 'consent' will prompt the user for consent prompt='consent')
Ruby
bir uygulamadır. Bir istemci nesnesini yapılandırdığınızda, uygulamanızın ihtiyaç duyduğu kapsamları belirtirsiniz uygulamanızın kimlik doğrulama uç noktasının URL'si ile birlikte erişimi (bu URL, yanıtı işler) .
Örneğin, bu kod bir kullanıcının Google Drive:
require 'google/apis/drive_v3' require "googleauth" require 'googleauth/stores/redis_token_store' client_id = Google::Auth::ClientId.from_file('/path/to/client_secret.json') scope = 'https://www.googleapis.com/auth/drive.metadata.readonly' token_store = Google::Auth::Stores::RedisTokenStore.new(redis: Redis.new) authorizer = Google::Auth::WebUserAuthorizer.new(client_id, scope, token_store, '/oauth2callback')
Uygulamanız, OAuth 2.0 işlemlerini gerçekleştirmek için istemci nesnesini kullanır. Örneğin, yetkilendirme isteği URL'lerini kullanma ve HTTP isteklerine erişim jetonları uygulama.
Node.js
Aşağıdaki kod snippet'i bir google.auth.OAuth2
nesnesi oluşturur. Bu nesne
parametrelerini belirtin.
Bu nesne, uygulamanızı tanımlamak için client_secret.json dosyanızdaki bilgileri kullanır. Alıcı: Erişim jetonu almak için kullanıcıdan izin isterken kullanıcıyı bir izin sayfasına yönlendirirsiniz. İzin sayfası URL'si oluşturmak için:
const {google} = require('googleapis'); const crypto = require('crypto'); const express = require('express'); const session = require('express-session'); /** * To use OAuth2 authentication, we need access to a CLIENT_ID, CLIENT_SECRET, AND REDIRECT_URI * from the client_secret.json file. To get these credentials for your application, visit * https://console.cloud.google.com/apis/credentials. */ const oauth2Client = new google.auth.OAuth2( YOUR_CLIENT_ID, YOUR_CLIENT_SECRET, YOUR_REDIRECT_URL ); // Access scopes for read-only Drive activity. const scopes = [ 'https://www.googleapis.com/auth/drive.metadata.readonly' ]; // Generate a secure random state value. const state = crypto.randomBytes(32).toString('hex'); // Store state in the session req.session.state = state; // Generate a url that asks permissions for the Drive activity scope const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true, // Include the state parameter to reduce the risk of CSRF attacks. state: state });
Önemli Not - refresh_token
yalnızca ilk
yetkilendirme. Diğer ayrıntılar
burada bulabilirsiniz.
HTTP/REST
Google'ın OAuth 2.0 uç noktası https://accounts.google.com/o/oauth2/v2/auth
adresindedir. Bu
uç noktasına yalnızca HTTPS üzerinden erişilebilir. Düz HTTP bağlantıları reddediliyor.
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
|
||||||
response_type |
Zorunlu
Google OAuth 2.0 uç noktasının bir yetkilendirme kodu döndürüp döndürmeyeceğini belirler. Web sunucusu uygulamaları için parametre değerini |
||||||
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. 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. |
||||||
access_type |
Önerilen
Kullanıcı yokken uygulamanızın erişim jetonlarını yenileyip yenileyemeyeceğini belirtir
kontrol edin. Geçerli parametre değerleri: Uygulamanızın erişim jetonlarını yenilemesi gerekiyorsa değeri |
||||||
state |
Önerilen
Uygulamanızın,
yetkilendirme sunucusunun yanıtıyla birlikte çalışır.
Sunucu, 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. |
||||||
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 |
||||||
enable_granular_consent |
İsteğe bağlı
Varsayılan olarak Google bir uygulama için ayrıntılı izinler sağladığında bu parametre, artık geçerli değil. |
||||||
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 |
||||||
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:
|
2. Adım: Google'ın OAuth 2.0 sunucusuna yönlendirin
Kimlik doğrulama işlemini başlatması için kullanıcıyı Google'ın OAuth 2.0 sunucusuna yönlendirin ve izin verilir. Bu durum genellikle, uygulamanızın kullanıcı verileri. Artımlı yetkilendirme durumunda ise adımı, uygulamanızın ilk önce erişebildiği ek kaynaklara erişmesi gerektiğinde de gerçekleşir henüz erişim iznine sahip değil.
PHP
- Google'ın OAuth 2.0 sunucusundan erişim istemek için bir URL oluşturun:
$auth_url = $client->createAuthUrl();
. - Kullanıcıyı
$auth_url
adresine yönlendirin:header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
Python
Bu örnekte, Flask web kullanılarak kullanıcının yetkilendirme URL'sine nasıl yönlendirileceği gösterilmektedir. uygulama çerçevesi:
return flask.redirect(authorization_url)
Ruby
- Google'ın OAuth 2.0 sunucusundan erişim istemek için bir URL oluşturun:
auth_uri = authorizer.get_authorization_url(login_hint: user_id, request: request)
. - Kullanıcıyı
auth_uri
adresine yönlendirin.
Node.js
-
1. Adım'da oluşturulan
authorizationUrl
URL'sini kullanın Google'ın OAuth 2.0 sunucusundan erişim istemeyi sağlayangenerateAuthUrl
yöntemi. -
Kullanıcıyı
authorizationUrl
adresine yönlendirin.res.redirect(authorizationUrl);
HTTP/REST
Sample redirect to Google's authorization server
An example URL is shown below, with line breaks and spaces for readability.
https://accounts.google.com/o/oauth2/v2/auth? scope=https%3A//www.googleapis.com/auth/drive.metadata.readonly& access_type=offline& include_granted_scopes=true& response_type=code& state=state_parameter_passthrough_value& redirect_uri=https%3A//oauth2.example.com/code& client_id=client_id
İstek URL'sini oluşturduktan sonra kullanıcıyı bu URL'ye yönlendirin.
Google'ın OAuth 2.0 sunucusu, kullanıcının kimliğini doğrular ve uygulamasına izin verilmesini öneririz. Yanıt, uygulamanıza geri gönderilir kullanarak bir URL oluşturun.
3. 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. Bir kullanıcı Google'ın OAuth 2.0 yetkilendirme uç noktasına tıkladığında, 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
OAuth istemci gizli anahtarı yanlış. Şu göz atın: OAuth istemcisi yapılandırma, bu istek için kullanılan istemci kimliği ve gizli anahtar bilgilerini içermelidir.
invalid_grant
Bir erişim jetonunu yenilerken veya ek yetkilendirmeden sonra, jetonun geçerliliği sona ermiş veya geçersiz kılındı. 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.
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
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ı
4. Adım: OAuth 2.0 sunucu yanıtını yönetin
OAuth 2.0 sunucusu, uygulamanızın erişim isteğine, belirtilen URL'yi kullanarak yanıt verir. belirtin.
Kullanıcı erişim isteğini onaylarsa yanıt bir yetkilendirme kodu içerir. Eğer Kullanıcı isteği onaylamazsa yanıt hata mesajı içerir. İlgili içeriği oluşturmak için kullanılan web sunucusuna döndürülen hata mesajı veya yetkilendirme kodu dizesi aşağıda gösterildiği gibidir:
Hata yanıtı:
https://oauth2.example.com/auth?error=access_denied
Yetkilendirme kodu yanıtı:
https://oauth2.example.com/auth?code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7.
Ö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//www.googleapis.com/auth/drive.metadata.readonly& access_type=offline& include_granted_scopes=true& response_type=code& state=state_parameter_passthrough_value& redirect_uri=https%3A//oauth2.example.com/code& client_id=client_id
OAuth 2.0 akışını tamamladıktan sonra
http://localhost/oauth2callback
. Bu da büyük olasılıkla
Yerel makineniz söz konusu adreste bir dosya sunmazsa 404 NOT FOUND
hatası oluşur. İlgili içeriği oluşturmak için kullanılan
sonraki adım, kullanıcı işlemi gerçekleştirdiğinde URI'da döndürülen bilgilerle ilgili
uygulamanıza yönlendirilir.
5. Adım: Yenileme ve erişim için yetkilendirme kodunu değiştirin jetonlar
Web sunucusu yetkilendirme kodunu aldıktan sonra, yetkilendirme kodunu değiş tokuş edebilir. kullanabilirsiniz.
PHP
Yetkilendirme kodunu erişim jetonuyla değiştirmek için authenticate
kullanın
yöntem:
$client->authenticate($_GET['code']);
Erişim jetonunu getAccessToken
yöntemiyle alabilirsiniz:
$access_token = $client->getAccessToken();
Python
Geri arama sayfanızda, yetkilendirmeyi doğrulamak için google-auth
kitaplığını kullanın
sunucu yanıtı olabilir. Ardından, yetkilendirme değişimi için flow.fetch_token
yöntemini kullanın.
kod yazmanızı öneririz:
state = flask.session['state'] flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( 'client_secret.json', scopes=['https://www.googleapis.com/auth/drive.metadata.readonly'], state=state) flow.redirect_uri = flask.url_for('oauth2callback', _external=True) authorization_response = flask.request.url flow.fetch_token(authorization_response=authorization_response) # Store the credentials in the session. # ACTION ITEM for developers: # Store user's access and refresh tokens in your data store if # incorporating this code into your real app. credentials = flow.credentials flask.session['credentials'] = { 'token': credentials.token, 'refresh_token': credentials.refresh_token, 'token_uri': credentials.token_uri, 'client_id': credentials.client_id, 'client_secret': credentials.client_secret, 'scopes': credentials.scopes}
Ruby
Geri çağırma sayfanızda, yetkilendirme sunucusunu doğrulamak için googleauth
kitaplığını kullanın
tıklayın. Şu öğeyi kaydetmek için authorizer.handle_auth_callback_deferred
yöntemini kullanın:
yetkilendirme koduna ve yetkilendirme isteğinde bulunan URL'ye geri yönlendirmeye olanak tanır. Bu
sonuçları kullanıcı oturumunda geçici olarak saklayarak kod değişimini erteler.
target_url = Google::Auth::WebUserAuthorizer.handle_auth_callback_deferred(request) redirect target_url
Node.js
Yetkilendirme kodunu erişim jetonuyla değiştirmek için getToken
kullanın
yöntem:
const url = require('url'); // Receive the callback from Google's OAuth 2.0 server. app.get('/oauth2callback', async (req, res) => { let q = url.parse(req.url, true).query; if (q.error) { // An error response e.g. error=access_denied console.log('Error:' + q.error); } else if (q.state !== req.session.state) { //check state value console.log('State mismatch. Possible CSRF attack'); res.end('State mismatch. Possible CSRF attack'); } else { // Get access and refresh tokens (if access_type is offline) let { tokens } = await oauth2Client.getToken(q.code); oauth2Client.setCredentials(tokens); });
HTTP/REST
Yetkilendirme kodunu erişim jetonuyla değiştirmek için
https://oauth2.googleapis.com/token
uç noktasını seçin ve şu parametreleri ayarlayın:
Alanlar | |
---|---|
client_id |
API Consolearacından alınan istemci kimliği Credentials page. |
client_secret |
API Consoleöğesinden alınan istemci gizli anahtarı Credentials page. |
code |
İlk istekten döndürülen yetkilendirme kodu. |
grant_type |
OAuth 2.0'da tanımlandığı gibi
spesifikasyonu, bu alanın değeri authorization_code olarak ayarlanmalıdır. |
redirect_uri |
API Console.
Verilen süre için Credentials page
client_id . |
Aşağıdaki snippet'te örnek bir istek gösterilmektedir:
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
Google bu isteğe kısa ömürlü erişim içeren bir JSON nesnesi döndürerek yanıt verir.
jetonu ve yenileme jetonu bulunur.
Yenileme jetonunun yalnızca uygulamanız access_type
Google'ınoffline
Yetkilendirme sunucusu'dur.
Yanıt aşağıdaki alanları içerir:
Alanlar | |
---|---|
access_token |
Uygulamanızın bir Google API isteğini yetkilendirmek için gönderdiği jeton. |
expires_in |
Erişim jetonunun saniye cinsinden kalan ömrü. |
refresh_token |
Yeni bir erişim jetonu almak için kullanabileceğiniz jeton. Yenileme jetonları
Kullanıcı erişimi iptal ederse.
Bu alan yalnızca access_type
parametresini Google'ın yetkilendirme sunucusuna yapılan ilk istekte offline olarak ayarlar.
|
scope |
access_token tarafından verilen erişim kapsamları,
boşlukla ayrılmış, büyük/küçük harfe duyarlı dizeler içerir. |
token_type |
Döndürülen jetonun türü. Şu anda bu alanın değeri her zaman
Bearer |
Aşağıdaki snippet örnek bir yanıt gösterir:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }.
Hatalar
Yetkilendirme kodunu erişim jetonuyla değiştirirken aşağıdaki sorunlarla karşılaşabilirsiniz: (beklenen yanıt yerine) hatası oluşur. Yaygın hata kodları ve önerilen çözümler şunlardır: aşağıda listelenmiştir.
invalid_grant
Sağlanan yetkilendirme kodu geçersiz veya yanlış biçimde. Şu tarihe kadar yeni bir kod isteyin: kullanıcıdan izin istemek için OAuth sürecini yeniden başlatma tekrar.
Google API'lerini çağırma
PHP
Aşağıdaki adımları tamamlayarak Google API'lerini çağırmak için erişim jetonunu kullanın:
- Yeni bir
Google\Client
nesnesine erişim jetonu uygulamanız gerekirse Örneğin, erişim jetonunu bir kullanıcı oturumunda depoladıysanızsetAccessToken
yöntemi:$client->setAccessToken($access_token);
- Çağırmak istediğiniz API için bir hizmet nesnesi oluşturun. Hizmet nesnesini derlemek için
oluşturucuya yetkilendirilmiş bir
Google\Client
nesnesi sağlayarak telefon etmek istiyorsunuz. Örneğin, Drive API'yi çağırmak için:$drive = new Google\Service\Drive($client);
. - API hizmetine istekte bulunmak için
hizmet nesnesi tarafından sağlanan arayüz.
Örneğin, kimliği doğrulanmış kullanıcının Google Drive'ındaki dosyaları listelemek için:
$files = $drive->files->listFiles(array())->getItems();
.
Python
Bir erişim jetonu aldıktan sonra, uygulamanız bu jetonu kullanarak belirli bir kullanıcı hesabı veya hizmet hesabı adına bir ad verebilirsiniz. Kullanıcıya özel yetkilendirme kimlik bilgilerini kullan API için bir hizmet nesnesi oluşturun ve bu nesneyi kullanarak yetkilendirilmiş API istekleri.
- Çağırmak istediğiniz API için bir hizmet nesnesi oluşturun. Hizmet nesnesini derlemek için
googleapiclient.discovery
kitaplığınınbuild
yöntemi API'nin adı ve sürümü ile kullanıcı kimlik bilgileri: Örneğin, Drive API'nin 3. sürümünü çağırmak için:from googleapiclient.discovery import build drive = build('drive', 'v2', credentials=credentials)
- API hizmetine istekte bulunmak için
hizmet nesnesi tarafından sağlanan arayüz.
Örneğin, kimliği doğrulanmış kullanıcının Google Drive'ındaki dosyaları listelemek için:
files = drive.files().list().execute()
.
Ruby
Bir erişim jetonu aldıktan sonra, uygulamanız bu jetonu kullanarak belirli bir kullanıcı hesabı veya hizmet hesabı adına bir ad verebilirsiniz. Kullanıcıya özel yetkilendirme kimlik bilgilerini kullan API için bir hizmet nesnesi oluşturun ve bu nesneyi kullanarak yetkilendirilmiş API istekleri.
- Çağırmak istediğiniz API için bir hizmet nesnesi oluşturun.
Örneğin, Drive API'nin 3. sürümünü çağırmak için:
drive = Google::Apis::DriveV3::DriveService.new
. - Hizmetteki kimlik bilgilerini ayarlayın:
drive.authorization = credentials
. - API hizmetine istekte bulunmak için
arayüz
hizmet nesnesi tarafından sağlanır.
Örneğin, kimliği doğrulanmış kullanıcının Google Drive'ındaki dosyaları listelemek için:
files = drive.list_files
.
Alternatif olarak,
options
parametresini yönteme eklemek için:
files = drive.list_files(options: { authorization: credentials })
Node.js
Erişim jetonu alıp bunu OAuth2
nesnesine ayarladıktan sonra nesneyi kullanın
API'yi çağırın. Uygulamanız, adına API isteklerini yetkilendirmek için bu jetonu kullanabilir
belirli bir kullanıcı hesabı veya hizmet hesabı. Çağırmak istediğiniz API için bir hizmet nesnesi oluşturun.
const { google } = require('googleapis'); // Example of using Google Drive API to list filenames in user's Drive. const drive = google.drive('v3'); drive.files.list({ auth: oauth2Client, pageSize: 10, fields: 'nextPageToken, files(id, name)', }, (err1, res1) => { if (err1) return console.log('The API returned an error: ' + err1); const files = res1.data.files; if (files.length) { console.log('Files:'); files.map((file) => { console.log(`${file.name} (${file.id})`); }); } else { console.log('No files found.'); } });
HTTP/REST
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,
Drive Files API'yi çağırma).
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
drive.files
Authorization: Bearer
HTTP kullanan uç nokta (Drive Files API)
başlık aşağıdaki gibi görünebilir. Kendi erişim jetonunuzu belirtmeniz gerektiğini unutmayın:
GET /drive/v2/files 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/drive/v2/files?access_token=access_token
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/drive/v2/files
Alternatif olarak, sorgu dizesi parametre seçeneği şu şekildedir:
curl https://www.googleapis.com/drive/v2/files?access_token=access_token
Tam örnek
Aşağıdaki örnekte, Kullanıcı kimliğini doğrular ve uygulamanın, kullanıcının Drive meta verilerine erişmesine izin verir.
PHP
Bu örneği çalıştırmak için:
- API Consoleiçinde, yerel makinenin URL'sini
listesidir. Örneğin,
http://localhost:8080
ekleyin. - Yeni bir dizin oluşturun ve bu dizinde değişiklik yapın. Örnek:
mkdir ~/php-oauth2-example cd ~/php-oauth2-example
. - Google API İstemcisini yükleyin
Besteci ile PHP için kitaplık:
composer require google/apiclient:^2.10
- İçeriği kullanarak
index.php
veoauth2callback.php
dosyalarını oluşturun bölümüne göz atın. - Örneği, PHP'yi sunacak şekilde yapılandırılmış bir web sunucusuyla çalıştırın. PHP 5.6 veya daha yeni bir sürüm kullanıyorsanız
PHP'nin yerleşik test web sunucusunu kullanabilir:
php -S localhost:8080 ~/php-oauth2-example
.
index.php
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google\Client(); $client->setAuthConfig('client_secrets.json'); $client->addScope(Google\Service\Drive::DRIVE_METADATA_READONLY); if (isset($_SESSION['access_token']) && $_SESSION['access_token']) { $client->setAccessToken($_SESSION['access_token']); $drive = new Google\Service\Drive($client); $files = $drive->files->listFiles(array())->getItems(); echo json_encode($files); } else { $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
oauth2callback.php
<?php require_once __DIR__.'/vendor/autoload.php'; session_start(); $client = new Google\Client(); $client->setAuthConfigFile('client_secrets.json'); $client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php'); $client->addScope(Google\Service\Drive::DRIVE_METADATA_READONLY); if (! isset($_GET['code'])) { // Generate and set state value $state = bin2hex(random_bytes(16)); $client->setState($state); $_SESSION['state'] = $state; $auth_url = $client->createAuthUrl(); header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); } else { // Check the state value if (!isset($_GET['state']) || $_GET['state'] !== $_SESSION['state']) { die('State mismatch. Possible CSRF attack.'); } $client->authenticate($_GET['code']); $_SESSION['access_token'] = $client->getAccessToken(); $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/'; header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL)); }
Python
Bu örnekte Flask çerçevesi kullanılmaktadır. Google
http://localhost:8080
adresinde, OAuth 2.0'ı test etmenize olanak tanıyan bir web uygulaması çalıştırır
akışı sağlar. Bu URL'ye giderseniz dört bağlantı görürsünüz:
- API isteğini test etme: Bu bağlantı, örnek bir API yürütmeye çalışan bir sayfaya işaret eder isteğinde bulunabilirsiniz. Gerekirse yetkilendirme akışını başlatır. Başarılı olursa sayfada API yanıtı.
- Kimlik doğrulama akışını doğrudan test etme: Bu bağlantı, kullanıcıyı göndermeye çalışan bir sayfaya yönlendirir. yetkilendirme akışı aracılığıyla sağlayabilirsiniz. Uygulama aşağıdaki işlemler için izin istiyor: Kullanıcı adına yetkili API istekleri gönderme
- Mevcut kimlik bilgilerini iptal et: Bu bağlantı, iptal eder.
- Clear Flask oturumu kimlik bilgilerini: Bu bağlantı, halihazırda sahip olduğunuz yetkilendirme kimlik bilgilerini temizler. emin olun. Bu, daha önce sitenizi ziyaret etmiş bir kullanıcının yeni bir oturumda API isteği yürütmeye çalıştı. Ayrıca bir kullanıcı size verilen izinleri iptal etmişse uygulamanızın alacağı API yanıtını görürsünüz. bir isteği yetkilendirmeye çalışırken uygulamanız hâlâ iptal edilmiş erişim jetonuyla bir isteği yetkilendirmeye çalışıyor olabilir.
# -*- coding: utf-8 -*- import os import flask import requests import google.oauth2.credentials import google_auth_oauthlib.flow import googleapiclient.discovery # This variable specifies the name of a file that contains the OAuth 2.0 # information for this application, including its client_id and client_secret. CLIENT_SECRETS_FILE = "client_secret.json" # This OAuth 2.0 access scope allows for full read/write access to the # authenticated user's account and requires requests to use an SSL connection. SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly'] API_SERVICE_NAME = 'drive' API_VERSION = 'v2' app = flask.Flask(__name__) # Note: A secret key is included in the sample so that it works. # If you use this code in your application, replace this with a truly secret # key. See https://flask.palletsprojects.com/quickstart/#sessions. app.secret_key = 'REPLACE ME - this value is here as a placeholder.' @app.route('/') def index(): return print_index_table() @app.route('/test') def test_api_request(): if 'credentials' not in flask.session: return flask.redirect('authorize') # Load credentials from the session. credentials = google.oauth2.credentials.Credentials( **flask.session['credentials']) drive = googleapiclient.discovery.build( API_SERVICE_NAME, API_VERSION, credentials=credentials) files = drive.files().list().execute() # Save credentials back to session in case access token was refreshed. # ACTION ITEM: In a production app, you likely want to save these # credentials in a persistent database instead. flask.session['credentials'] = credentials_to_dict(credentials) return flask.jsonify(**files) @app.route('/authorize') def authorize(): # Create flow instance to manage the OAuth 2.0 Authorization Grant Flow steps. flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( CLIENT_SECRETS_FILE, scopes=SCOPES) # The URI created here must exactly match one of the authorized redirect URIs # for the OAuth 2.0 client, which you configured in the API Console. If this # value doesn't match an authorized URI, you will get a 'redirect_uri_mismatch' # error. flow.redirect_uri = flask.url_for('oauth2callback', _external=True) authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true') # Store the state so the callback can verify the auth server response. flask.session['state'] = state return flask.redirect(authorization_url) @app.route('/oauth2callback') def oauth2callback(): # Specify the state when creating the flow in the callback so that it can # verified in the authorization server response. state = flask.session['state'] flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( CLIENT_SECRETS_FILE, scopes=SCOPES, state=state) flow.redirect_uri = flask.url_for('oauth2callback', _external=True) # Use the authorization server's response to fetch the OAuth 2.0 tokens. authorization_response = flask.request.url flow.fetch_token(authorization_response=authorization_response) # Store credentials in the session. # ACTION ITEM: In a production app, you likely want to save these # credentials in a persistent database instead. credentials = flow.credentials flask.session['credentials'] = credentials_to_dict(credentials) return flask.redirect(flask.url_for('test_api_request')) @app.route('/revoke') def revoke(): if 'credentials' not in flask.session: return ('You need to <a href="/authorize">authorize</a> before ' + 'testing the code to revoke credentials.') credentials = google.oauth2.credentials.Credentials( **flask.session['credentials']) revoke = requests.post('https://oauth2.googleapis.com/revoke', params={'token': credentials.token}, headers = {'content-type': 'application/x-www-form-urlencoded'}) status_code = getattr(revoke, 'status_code') if status_code == 200: return('Credentials successfully revoked.' + print_index_table()) else: return('An error occurred.' + print_index_table()) @app.route('/clear') def clear_credentials(): if 'credentials' in flask.session: del flask.session['credentials'] return ('Credentials have been cleared.<br><br>' + print_index_table()) def credentials_to_dict(credentials): return {'token': credentials.token, 'refresh_token': credentials.refresh_token, 'token_uri': credentials.token_uri, 'client_id': credentials.client_id, 'client_secret': credentials.client_secret, 'scopes': credentials.scopes} def print_index_table(): return ('<table>' + '<tr><td><a href="/test">Test an API request</a></td>' + '<td>Submit an API request and see a formatted JSON response. ' + ' Go through the authorization flow if there are no stored ' + ' credentials for the user.</td></tr>' + '<tr><td><a href="/authorize">Test the auth flow directly</a></td>' + '<td>Go directly to the authorization flow. If there are stored ' + ' credentials, you still might not be prompted to reauthorize ' + ' the application.</td></tr>' + '<tr><td><a href="/revoke">Revoke current credentials</a></td>' + '<td>Revoke the access token associated with the current user ' + ' session. After revoking credentials, if you go to the test ' + ' page, you should see an <code>invalid_grant</code> error.' + '</td></tr>' + '<tr><td><a href="/clear">Clear Flask session credentials</a></td>' + '<td>Clear the access token currently stored in the user session. ' + ' After clearing the token, if you <a href="/test">test the ' + ' API request</a> again, you should go back to the auth flow.' + '</td></tr></table>') if __name__ == '__main__': # When running locally, disable OAuthlib's HTTPs verification. # ACTION ITEM for developers: # When running in production *do not* leave this option enabled. os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' # Specify a hostname and port that are set as a valid redirect URI # for your API project in the Google API Console. app.run('localhost', 8080, debug=True)
Ruby
Bu örnekte Sinatra çerçevesi kullanılmaktadır.
require 'google/apis/drive_v3' require 'sinatra' require 'googleauth' require 'googleauth/stores/redis_token_store' configure do enable :sessions set :client_id, Google::Auth::ClientId.from_file('/path/to/client_secret.json') set :scope, Google::Apis::DriveV3::AUTH_DRIVE_METADATA_READONLY set :token_store, Google::Auth::Stores::RedisTokenStore.new(redis: Redis.new) set :authorizer, Google::Auth::WebUserAuthorizer.new(settings.client_id, settings.scope, settings.token_store, '/oauth2callback') end get '/' do user_id = settings.client_id.id credentials = settings.authorizer.get_credentials(user_id, request) if credentials.nil? redirect settings.authorizer.get_authorization_url(login_hint: user_id, request: request) end drive = Google::Apis::DriveV3::DriveService.new files = drive.list_files(options: { authorization: credentials }) "<pre>#{JSON.pretty_generate(files.to_h)}</pre>" end get '/oauth2callback' do target_url = Google::Auth::WebUserAuthorizer.handle_auth_callback_deferred(request) redirect target_url end
Node.js
Bu örneği çalıştırmak için:
-
API Consolebölümüne
yerel makinenizi ekleyin. Örneğin,
http://localhost
. - Bakım LTS'si, etkin LTS kanalı veya mevcut sürümün yüklü olduğundan emin olun. Node.js yüklendi.
-
Yeni bir dizin oluşturun ve bu dizinde değişiklik yapın. Örnek:
mkdir ~/nodejs-oauth2-example cd ~/nodejs-oauth2-example
-
Install the
Google API Client
Library
for Node.js using npm:
npm install googleapis
. -
Aşağıdaki içeriklerle
main.js
dosyalarını oluşturun. -
Örneği çalıştırın:
node .\main.js
.
main.js
const http = require('http'); const https = require('https'); const url = require('url'); const { google } = require('googleapis'); const crypto = require('crypto'); const express = require('express'); const session = require('express-session'); /** * To use OAuth2 authentication, we need access to a CLIENT_ID, CLIENT_SECRET, AND REDIRECT_URI. * To get these credentials for your application, visit * https://console.cloud.google.com/apis/credentials. */ const oauth2Client = new google.auth.OAuth2( YOUR_CLIENT_ID, YOUR_CLIENT_SECRET, YOUR_REDIRECT_URL ); // Access scopes for read-only Drive activity. const scopes = [ 'https://www.googleapis.com/auth/drive.metadata.readonly' ]; /* Global variable that stores user credential in this code example. * ACTION ITEM for developers: * Store user's refresh token in your data store if * incorporating this code into your real app. * For more information on handling refresh tokens, * see https://github.com/googleapis/google-api-nodejs-client#handling-refresh-tokens */ let userCredential = null; async function main() { const app = express(); app.use(session({ secret: 'your_secure_secret_key', // Replace with a strong secret resave: false, saveUninitialized: false, })); // Example on redirecting user to Google's OAuth 2.0 server. app.get('/', async (req, res) => { // Generate a secure random state value. const state = crypto.randomBytes(32).toString('hex'); // Store state in the session req.session.state = state; // Generate a url that asks permissions for the Drive activity scope const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true, // Include the state parameter to reduce the risk of CSRF attacks. state: state }); res.redirect(authorizationUrl); }); // Receive the callback from Google's OAuth 2.0 server. app.get('/oauth2callback', async (req, res) => { // Handle the OAuth 2.0 server response let q = url.parse(req.url, true).query; if (q.error) { // An error response e.g. error=access_denied console.log('Error:' + q.error); } else if (q.state !== req.session.state) { //check state value console.log('State mismatch. Possible CSRF attack'); res.end('State mismatch. Possible CSRF attack'); } else { // Get access and refresh tokens (if access_type is offline) let { tokens } = await oauth2Client.getToken(q.code); oauth2Client.setCredentials(tokens); /** Save credential to the global variable in case access token was refreshed. * ACTION ITEM: In a production app, you likely want to save the refresh token * in a secure persistent database instead. */ userCredential = tokens; // Example of using Google Drive API to list filenames in user's Drive. const drive = google.drive('v3'); drive.files.list({ auth: oauth2Client, pageSize: 10, fields: 'nextPageToken, files(id, name)', }, (err1, res1) => { if (err1) return console.log('The API returned an error: ' + err1); const files = res1.data.files; if (files.length) { console.log('Files:'); files.map((file) => { console.log(`${file.name} (${file.id})`); }); } else { console.log('No files found.'); } }); } }); // Example on revoking a token app.get('/revoke', async (req, res) => { // Build the string for the POST request let postData = "token=" + userCredential.access_token; // Options for POST request to Google's OAuth 2.0 server to revoke a token let postOptions = { host: 'oauth2.googleapis.com', port: '443', path: '/revoke', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) } }; // Set up the request const postReq = https.request(postOptions, function (res) { res.setEncoding('utf8'); res.on('data', d => { console.log('Response: ' + d); }); }); postReq.on('error', error => { console.log(error) }); // Post the request with data postReq.write(postData); postReq.end(); }); const server = http.createServer(app); server.listen(80); } main().catch(console.error);
HTTP/REST
Bu Python örneğinde Flask çerçevesi kullanılmaktadır ve OAuth'u göstermek için İstekler kitaplığı 2.0 web akışı. Bu akışta Python için Google API İstemci Kitaplığı'nı kullanmanızı öneririz. ( örneğinin istemci kitaplığını kullanması gerekir.)
import json import flask import requests app = flask.Flask(__name__) CLIENT_ID = '123456789.apps.googleusercontent.com' CLIENT_SECRET = 'abc123' # Read from a file or environmental variable in a real app SCOPE = 'https://www.googleapis.com/auth/drive.metadata.readonly' REDIRECT_URI = 'http://example.com/oauth2callback' @app.route('/') def index(): if 'credentials' not in flask.session: return flask.redirect(flask.url_for('oauth2callback')) credentials = json.loads(flask.session['credentials']) if credentials['expires_in'] <= 0: return flask.redirect(flask.url_for('oauth2callback')) else: headers = {'Authorization': 'Bearer {}'.format(credentials['access_token'])} req_uri = 'https://www.googleapis.com/drive/v2/files' r = requests.get(req_uri, headers=headers) return r.text @app.route('/oauth2callback') def oauth2callback(): if 'code' not in flask.request.args: state = str(uuid.uuid4()) flask.session['state'] = state auth_uri = ('https://accounts.google.com/o/oauth2/v2/auth?response_type=code' '&client_id={}&redirect_uri={}&scope={}&state={}').format(CLIENT_ID, REDIRECT_URI, SCOPE, state) return flask.redirect(auth_uri) else: if 'state' not in flask.request.args or flask.request.args['state'] != flask.session['state']: return 'State mismatch. Possible CSRF attack.', 400 auth_code = flask.request.args.get('code') data = {'code': auth_code, 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'redirect_uri': REDIRECT_URI, 'grant_type': 'authorization_code'} r = requests.post('https://oauth2.googleapis.com/token', data=data) flask.session['credentials'] = r.text return flask.redirect(flask.url_for('index')) if __name__ == '__main__': import uuid app.secret_key = str(uuid.uuid4()) app.debug = False app.run()
Yönlendirme URI'si doğrulama kuralları
Google, geliştiricilere yardımcı olmak amacıyla URI'leri yönlendirmek için aşağıdaki doğrulama kurallarını uygular sağlamak için çok iyi bir fırsattır. Yönlendirme URI'leriniz bu kurallara uygun olmalıdır. Görüntüleyin Şu URL'nin RFC 3986 bölüm 3: alan, ana makine, yol, sorgu, şema ve kullanıcıbilgisi tanımı, aşağıda açıklanmıştır.
Doğrulama kuralları | |
---|---|
Şema |
Yönlendirme URI'leri düz HTTP değil, HTTPS şemasını kullanmalıdır. Yerel ana makine URI'leri ( localhost IP adresi URI'leri) bu kuraldan muaftır. |
Düzenleyen |
Ana makineler ham IP adresleri olamaz. Localhost IP adresleri bu kuraldan muaftır. |
Alan |
“googleusercontent.com” olamaz.goo.gl ) içeremez
Uygulama, alanın sahibi. Ayrıca, daha kısa bir alan adına sahip bir uygulama
söz konusu alana yönlendirme yapıyorsa bu yönlendirme URI'sinde
“/google-callback/” yolunda veya şununla biter:
“/google-callback” . |
Kullanıcı Bilgileri |
Yönlendirme URI'leri kullanıcı bilgileri alt bileşenini içeremez. |
Yol |
Yönlendirme URI'leri yol geçişi (dizin geri izleme olarak da adlandırılır) içeremez.
( |
Sorgu |
Yönlendirme URI'leri şunları içeremez: açık yönlendirmeler. |
Parça |
Yönlendirme URI'leri parça bileşeni içeremez. |
Karakterler |
Yönlendirme URI'leri aşağıdakiler de dahil olmak üzere belirli karakterleri içeremez:
|
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, kullanıcıların müzik parçalarından kesitler alıp mix oluşturmalarına olanak tanıyan bir uygulama için kaynaklarda oturum açan kişinin adı olabilir. Ancak, Tamamlanan bir mix'i kaydetmek, kullanıcının Google Drive'ına erişmeyi gerektirir. Çoğu kişi bunu bulur uygulama aslında yalnızca o sırada Google Drive'larına erişmeleri istense bile doğal olarak ihtiyaç duydu.
Bu durumda, oturum açma sırasında uygulama openid
ve
profile
kapsamlarını dahil edin ve daha sonra
İlk istek sırasında https://www.googleapis.com/auth/drive.file
kapsamı
mix'i de kullanabilirsiniz.
Artımlı yetkilendirme uygulamak için erişim istemeyle ilgili normal akışı tamamlarsınız. belirtmelisiniz, ancak yetkilendirme isteğinin önceden verilmiş kapsamları içerdiğinden emin olun. Bu yaklaşımınız uygulamanızın birden fazla erişim jetonunu yönetmek zorunda kalmamasını sağlar.
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.
1. Adım: Yetkilendirmeyi ayarlayın. parametrelerini ve 2. Adım: Google'ın OAuth 2.0 sunucusuna yönlendiren tüm yönlendirmeler artımlı yetkilendirme kullanır. Kod örnekleri aşağıda, artımlı yetkilendirme kullanmak için eklemeniz gereken kod da gösterilmektedir.
PHP
$client->setIncludeGrantedScopes(true);
Python
Python'da, include_granted_scopes
anahtar kelime bağımsız değişkenini true
olarak ayarlayın
Bir yetkilendirme isteğinin önceden verilmiş kapsamları içerdiğinden emin olun. Bir iş görüşmesinde
include_granted_scopes
, ayarladığınız tek anahtar kelime bağımsız değişkeni olmayacaktır.
aşağıdaki örnekte gösterilmiştir.
authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true')
Ruby
auth_client.update!( :additional_parameters => {"include_granted_scopes" => "true"} )
Node.js
const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true });
HTTP/REST
GET https://accounts.google.com/o/oauth2/v2/auth? client_id=your_client_id& response_type=code& state=state_parameter_passthrough_value& scope=https%3A//www.googleapis.com/auth/drive.file& redirect_uri=https%3A//oauth2.example.com/code& prompt=consent& include_granted_scopes=true
Erişim jetonunu yenileme (çevrimdışı erişim)
Erişim jetonlarının süresi belirli aralıklarla sona erer ve ilgili API isteği için geçersiz kimlik bilgileri haline gelir. Siz Kullanıcı izin istemeden erişim jetonunu yenileyebilir (kullanıcının mevcut değil) girmeniz gerekir.
- Google API İstemci Kitaplığı kullanıyorsanız istemci nesnesi yenilenir nesneyi çevrimdışı erişim için yapılandırdığınız sürece erişim jetonunu gerektiği şekilde ayarlamanız gerekir.
- İstemci kitaplığı kullanmıyorsanız
access_type
HTTP'yi ayarlamanız gerekir kullanıcıyıoffline
Google'ın OAuth 2.0 sunucusuna bağlanmalıdır. Bu durumda, Google'ın yetkilendirme sunucusu bir yetkilendirme değişimi yaptığınızda yenilenme jetonu kodu ile doğrulayın. Ardından, erişim jetonunun süresi dolduğunda (veya başka bir zamanda) yeni bir erişim jetonu almak için yenileme jetonu kullanabilir.
Google'a erişmesi gereken uygulamalar için çevrimdışı erişim isteğinde bulunmak
Kullanıcı olmadığında API. Örneğin, yedekleme hizmetleri gerçekleştiren veya
yenilenmesi gerektiğinde erişim jetonunu yenileyebilmek için önceden belirlenmiş zamanlarda
kullanıcı mevcut değil. Varsayılan erişim stili online
olarak adlandırılır.
Sunucu tarafı web uygulamaları, yüklü uygulamalar ve cihazların tümü yenileme jetonları alır sırasında açıklığa kavuşturulabilir. Yenileme jetonları genellikle istemci tarafında kullanılmaz. (JavaScript) web uygulamaları için geçerlidir.
PHP
Uygulamanızın bir Google API'sine çevrimdışı erişmesi gerekiyorsa API istemcisinin erişim türünü
offline
:
$client->setAccessType("offline");
Bir kullanıcı istenen kapsamlara çevrimdışı erişim izni verdikten sonra API'yi kullanmaya devam edebilirsiniz. İstemcinin, kullanıcı çevrimdışıyken kullanıcı adına Google API'lerine erişmesini sağlayın. İstemci nesnesi erişim jetonunu gerektiği şekilde yeniler.
Python
Python'da, access_type
anahtar kelime bağımsız değişkenini offline
olarak ayarlayıp
kullanıcıdan tekrar izin istemek zorunda kalmadan erişim jetonunu yenileyebileceğinize
izni gerekir. access_type
anahtar kelimesi tek anahtar kelime olmayabilir
bağımsız değişkeni, aşağıdaki örnekte gösterildiği gibi, .
authorization_url, state = flow.authorization_url( # Enable offline access so that you can refresh an access token without # re-prompting the user for permission. Recommended for web server apps. access_type='offline', # Enable incremental authorization. Recommended as a best practice. include_granted_scopes='true')
Bir kullanıcı istenen kapsamlara çevrimdışı erişim izni verdikten sonra API'yi kullanmaya devam edebilirsiniz. İstemcinin, kullanıcı çevrimdışıyken kullanıcı adına Google API'lerine erişmesini sağlayın. İstemci nesnesi erişim jetonunu gerektiği şekilde yeniler.
Ruby
Uygulamanızın bir Google API'sine çevrimdışı erişmesi gerekiyorsa API istemcisinin erişim türünü
offline
:
auth_client.update!( :additional_parameters => {"access_type" => "offline"} )
Bir kullanıcı istenen kapsamlara çevrimdışı erişim izni verdikten sonra API'yi kullanmaya devam edebilirsiniz. İstemcinin, kullanıcı çevrimdışıyken kullanıcı adına Google API'lerine erişmesini sağlayın. İstemci nesnesi erişim jetonunu gerektiği şekilde yeniler.
Node.js
Uygulamanızın bir Google API'sine çevrimdışı erişmesi gerekiyorsa API istemcisinin erişim türünü
offline
:
const authorizationUrl = oauth2Client.generateAuthUrl({ // 'online' (default) or 'offline' (gets refresh_token) access_type: 'offline', /** Pass in the scopes array defined above. * Alternatively, if only one scope is needed, you can pass a scope URL as a string */ scope: scopes, // Enable incremental authorization. Recommended as a best practice. include_granted_scopes: true });
Bir kullanıcı istenen kapsamlara çevrimdışı erişim izni verdikten sonra API'yi kullanmaya devam edebilirsiniz. İstemcinin, kullanıcı çevrimdışıyken kullanıcı adına Google API'lerine erişmesini sağlayın. İstemci nesnesi erişim jetonunu gerektiği şekilde yeniler.
Erişim jetonlarının süresi dolar. Bu kitaplık, yeni bir erişim elde etmek için otomatik olarak yenileme jetonu kullanacak jetonu kullanma şansınız yoktur. En yeni jetonları her zaman saklamanın kolay bir yolu jeton etkinliğini kullanmaktır:
oauth2Client.on('tokens', (tokens) => { if (tokens.refresh_token) { // store the refresh_token in your secure persistent database console.log(tokens.refresh_token); } console.log(tokens.access_token); });
Bu jeton etkinliği yalnızca ilk yetkilendirmede gerçekleşir ve
generateAuthUrl
çağrılırken access_type
- offline
yöntemini kullanın. Uygulamanıza gerekli izinleri zaten verdiyseniz
bir yenileme jetonu almak için uygun kısıtlamaları ayarlamadan
yeni bir yenileme jetonu almak için uygulamayı yeniden yetkilendirin.
refresh_token
özelliğini daha sonra ayarlamak için setCredentials
yöntemini kullanabilirsiniz:
oauth2Client.setCredentials({ refresh_token: `STORED_REFRESH_TOKEN` });
İstemci bir yenileme jetonu aldıktan sonra, erişim jetonları alınır ve otomatik olarak yenilenir API'ye yapılan bir sonraki çağrıda belirtilir.
HTTP/REST
Uygulamanız, erişim jetonunu yenilemek için HTTPS POST
gönderir
yetkilendirme sunucusuna (https://oauth2.googleapis.com/token
) gönderdiğiniz istek üzerine
aşağıdaki parametreleri içerir:
Alanlar | |
---|---|
client_id |
API Consoleöğesinden alınan istemci kimliği. |
client_secret |
API Consoleöğesinden alınan istemci gizli anahtarı. |
grant_type |
Farklı
OAuth 2.0 spesifikasyonu,
bu alanın değeri refresh_token olarak ayarlanmalıdır. |
refresh_token |
Yetkilendirme kodu exchange'inden döndürülen yenileme jetonu. |
Aşağıdaki snippet'te örnek bir istek gösterilmektedir:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded client_id=your_client_id& client_secret=your_client_secret& refresh_token=refresh_token& grant_type=refresh_token
Kullanıcı, uygulamaya verilen erişimi iptal etmediği sürece jeton sunucusu, yeni bir erişim jetonu içeren bir JSON nesnesi döndürür. Aşağıdaki snippet'te bir örnek yanıt:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "scope": "https://www.googleapis.com/auth/drive.metadata.readonly", "token_type": "Bearer" }
Verilecek yenileme jetonlarının sayısının sınırlı olduğunu unutmayın; başına bir sınır ve tüm istemcilerde her kullanıcı için ayrı ayrı düzenleyebilirsiniz. Yenileme jetonlarını kaydetmeniz gerekir uzun süreli depolama alanına sahip olacak ve geçerli kaldıkları sürece bunları kullanmaya devam edebileceksiniz. Uygulamanız çok fazla yenileme jetonu istiyorsa bu sınırlarla karşılaşabilir. Böyle bir durumda eski yenileme jetonları çalışmayı durduracak.
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.
PHP
Bir jetonu programlı olarak iptal etmek için revokeToken()
komutunu çağırın:
$client->revokeToken();
Python
Bir jetonu programlı bir şekilde iptal etmek için
https://oauth2.googleapis.com/revoke
etiketi, jetonu parametre olarak içerir ve
Content-Type
üstbilgisi:
requests.post('https://oauth2.googleapis.com/revoke', params={'token': credentials.token}, headers = {'content-type': 'application/x-www-form-urlencoded'})
Ruby
Bir jetonu programlı bir şekilde iptal etmek için oauth2.revoke
öğesine bir HTTP isteği gönderin
uç nokta:
uri = URI('https://oauth2.googleapis.com/revoke') response = Net::HTTP.post_form(uri, 'token' => auth_client.access_token)
Bu jeton bir erişim jetonu veya yenileme jetonu olabilir. Jeton bir erişim jetonuysa ve yenileme jetonu varsa yenileme jetonu da iptal edilir.
İptal işlemi başarıyla tamamlanırsa yanıtın durum kodu
200
Hata koşulları için 400
durum kodu, yanında bir
hata kodu.
Node.js
Bir jetonu programlı bir şekilde iptal etmek için /revoke
adresine HTTPS POST isteği gönderin
uç nokta:
const https = require('https'); // Build the string for the POST request let postData = "token=" + userCredential.access_token; // Options for POST request to Google's OAuth 2.0 server to revoke a token let postOptions = { host: 'oauth2.googleapis.com', port: '443', path: '/revoke', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) } }; // Set up the request const postReq = https.request(postOptions, function (res) { res.setEncoding('utf8'); res.on('data', d => { console.log('Response: ' + d); }); }); postReq.on('error', error => { console.log(error) }); // Post the request with data postReq.write(postData); postReq.end();
Jeton parametresi, bir erişim jetonu veya yenileme jetonu olabilir. Jeton bir erişim jetonuysa ve yenileme jetonu varsa yenileme jetonu da iptal edilir.
İptal işlemi başarıyla tamamlanırsa yanıtın durum kodu
200
Hata koşulları için 400
durum kodu, yanında bir
hata kodu.
HTTP/REST
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.
Hesaplar Arası Korumayı Uygulama
Kullanıcılarınızın güvenliğini korumak için atmanız gereken ek bir adım Hesaplar Arası Google'ın Hesaplar Arası Koruma Hizmeti'ni kullanarak koruma. Bu hizmet sayesinde şunları yapabilirsiniz: uygulamanıza aşağıdaki konularda bilgi sağlayan güvenlik işlemi bildirimlerine abone olun: kullanıcı hesabında önemli değişiklikler yapabilir. Daha sonra bu bilgileri kullanarak karar verdiğinizden emin olun.
Google'ın Hesaplar Arası Koruma Hizmeti tarafından uygulamanıza gönderilen etkinlik türlerine örnek olarak aşağıdakiler verilebilir:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
-
https://schemas.openid.net/secevent/oauth/event-type/token-revoked
-
https://schemas.openid.net/secevent/risc/event-type/account-disabled
Bkz. Kullanıcı hesaplarını Hesaplar Arası Koruma ile koruma 'nı inceleyin. inceleyin.