Uyarı: Bu sayfa, Google'ın eski API'leri olan Google Veri API'leriyle ilgilidir. Bu sayfalar, çoğu yeni API'lerle değiştirilen Google Veri API'leri dizininde listelenen API'lerle ilgilidir. Belirli bir yeni API ile ilgili bilgi edinmek için yeni API'nin belgelerine bakabilirsiniz. Yeni bir API ile istekleri yetkilendirme hakkında bilgi için Google Hesaplarında Kimlik Doğrulama ve Yetkilendirme başlıklı makaleyi inceleyin.
Önemli: Yeni uygulamalar için ClientLogin'i kullanmayın. Bunun yerine, daha güvenli olan OAuth kimlik doğrulama protokolünü kullanın. ClientLogin, kullanımdan kaldırılmış bir kimlik doğrulama protokolüdür ve 20 Nisan 2015'te kapatılmaktadır. Bu süre sonrasında ClientLogin isteklerine yanıt verilmez. ClientLogin kullanan mevcut uygulamalarınız varsa OAuth'a geçmenizi öneririz. Bu kitaplıktaki ClientLogin desteği, bir sonraki ana sürümde kaldırılacaktır.
Bu dokümanda, her bir Google Data API istemci kitaplığında Google'ın Yüklü Uygulamalar İçin Kimlik Doğrulaması'nın nasıl kullanılacağı açıklanmaktadır.
Bir kullanıcının gizli verilerine erişmesi gereken (Google veya G Suite hesabı tarafından korunan) yüklü uygulamalar, kullanıcıların kimliğini doğrulamak için programatik olarak ClientLogin'i kullanabilir. "Yüklü uygulama", web uygulaması yerine masaüstü bilgisayar veya cep telefonu gibi bir cihaza yüklenen uygulamadır.
Web uygulaması mı oluşturuyorsunuz?
Web uygulamalarının kimlik doğrulama yöntemi olarak ClientLogin'i kullanması önerilmez. Bunun yerine lütfen AuthSub'ı Google Data API İstemci Kitaplıklarıyla kullanma konusuna bakın.
Kitle
Bu doküman, Google Veri API'leri istemci kitaplıklarını kullanarak bir Google Veri hizmetine erişen uygulamalar yazmak isteyen geliştiriciler için hazırlanmıştır. Bu dokümanda ClientLogin arayüzü hakkında bilgi sahibi olduğunuz varsayılmaktadır. ClientLogin protokolünün tam açıklaması için Yüklü Uygulamalar İçin Kimlik Doğrulama sayfasına bakın.
Google Data API istemci kitaplıkları, uygulamalarınızda ClientLogin'i kullanmanıza yardımcı olacak yöntemler sağlar. Özellikle kimlik doğrulama jetonu alma, CAPTCHA sorgulamalarını işleme, yetkilendirme jetonunu daha sonra kullanmak üzere geri çağırma ve her istekle doğru Authorization
üstbilgisini gönderme yöntemleri vardır.
ClientLogin ve Google Data API'lerini istemci kitaplıkları olmadan kullanma
Uygulamalarınızda ClientLogin'i kullanmanın tek yolu istemci kitaplıklarıdır. Bilmeniz gereken her şey, Yüklü Uygulamalar İçin Kimlik Doğrulama başlıklı ClientLogin dokümanlarında bulunabilir. Ancak istemci kitaplıkları, Google Veri uygulamanızda ClientLogin'i kullanmanıza yardımcı olacak yöntemler sağlar.
ClientLogin ve Google Veri API'leriyle çalışma: istemci kitaplığı örnekleri
Bu bölümde, ClientLogin dokümanlarının "ClientLogin Arayüz" bölümünde açıklanan adımları uygulamak için Google Veri API'leri istemci kitaplıklarının kullanımıyla ilgili örnekler verilmiştir.
Bu dokümandaki örneklerde Google Takvim ile etkileşim gösterilmiştir (örnekleri takip etmek için Calendar Data API hakkında bilgi sahibi olmanız gerekmez).
Yetkilendirme jetonu alma
ClientLogin'i kullanmak için uygulamanızın ClientLogin işleyicisine https://www.google.com/accounts/ClientLogin
işleyicisi için bir HTTPS POST
yapması gerekir. POST
gövdesi, application/x-www-form-urlencoded
varsayılan kodlamaya sahip bir form gönderisi olarak yapılandırılmalıdır. İstemci kitaplıklarından birini kullanarak
bu isteği tek bir kod satırında yapabilirsiniz.
Aşağıdaki örnekler ilk olarak Calendar Data API'ye bağlanan bir hizmet nesnesi oluşturur ve ardından ClientLogin işleyicisine bir HTTP POST
oluşturur.
Java
import com.google.gdata.client.*; import com.google.gdata.client.calendar.*; CalendarService client = new CalendarService("yourCompany-yourAppName-v1"); client.setUserCredentials("user@example.com", "pa$$word");
If you know your users will be using a G Suite account (as opposed to a Google/Gmail Account), you can streamline the login process by specifying the appropriate ClientLogin account type:
import com.google.gdata.client.*; import com.google.gdata.client.calendar.*; CalendarService client = new CalendarService("yourCompany-yourAppName-v1"); client.setUserCredentials("user@example.com", "pa$$word", ClientLoginAccountType.HOSTED);
.NET
using Google.GData.Client; using Google.GData.Calendar; CalendarService client = new CalendarService("yourCompany-yourAppName-v1"); client.setUserCredentials("user@example.com", "pa$$word"); client.QueryAuthenticationToken(); // Authenticate the user immediately
If you know your users will be using a G Suite account (as opposed to a Google/Gmail Account), you can streamline the login process by specifying the appropriate ClientLogin account type:
using Google.GData.Client; using Google.GData.Calendar; GDataGAuthRequestFactory authFactory = new GDataGAuthRequestFactory("cl", "yourCompany-yourAppName-v1"); authFactory.AccountType = "HOSTED"; CalendarService client = new CalendarService(authFactory.ApplicationName); client.RequestFactory = authFactory; client.setUserCredentials("user@example.com", "pa$$word"); client.QueryAuthenticationToken(); // Authenticate the user immediately
PHP
require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $serviceName = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // predefined service name ('cl') for calendar $applicationName = 'yourCompany-yourAppName-v1'; // Create an authenticated HTTP client $httpClient = Zend_Gdata_ClientLogin::getHttpClient('user@example.com', 'pa$$word', $serviceName, null, $applicationName); $client = new Zend_Gdata_Calendar($httpClient, $applicationName); // Create an instance of the Calendar service
If you know your users will be using a G Suite account (as opposed to a Google/Gmail Account), you can streamline the login process by specifying the appropriate ClientLogin account type:
require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_Calendar'); $serviceName = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; $applicationName = 'yourCompany-yourAppName-v1'; $accountType = 'HOSTED'; $httpClient = Zend_Gdata_ClientLogin::getHttpClient( 'user@example.com', 'pa$$word', $serviceName, null, $applicationName, null, null, null, $accountType); $client = new Zend_Gdata_Calendar($httpClient, $applicationName);
Python
GDClient'ı temel alan yeni v2.0+ sınıflarını kullanıyorsanız:
import gdata.calendar.client email = 'user@example.com' password = 'pa$$word' application_name = 'yourCompany-yourAppName-v1' client = gdata.calendar.client.CalendarClient() auth_token = client.ClientLogin(email, password, application_name, service='cl')
If you know your users will be using a G Suite account (as opposed to a Google/Gmail Account), you can streamline the login process by specifying the appropriate ClientLogin account type:
auth_token = client.ClientLogin(email, password, application_name, account_type='HOSTED', service='cl')
Alternatively, if you're using the older v1.0 classes based off of GDataService, the calls are a bit different:
import gdata.calendar.service email = 'user@example.com' password = 'pa$$word' application_name = 'yourCompany-yourAppName-v1' client = gdata.calendar.service.CalendarService() client.ClientLogin(email, password, source=application_name) # OR, you can use ProgrammaticLogin() client = gdata.calendar.service.CalendarService(email=email, password=password, source=application_name) client.ProgrammaticLogin()
2.0 ve sonraki sürümlerde olduğu gibi, kullanıcılarınız bir G Suite hesabı kullanacaksa uygun ClientLogin hesap türünü belirtebilirsiniz:
import gdata.calendar.service client = gdata.calendar.service.CalendarService() client.ClientLogin('user@example.com', 'pa$$word', account_type='HOSTED', source='yourCompany-yourAppName-v1')
See the request parameters section for a
detailed explanation of each ClientLogin parameter. A complete list of available service
names is available in the FAQ.
Note: By default, the client libraries set an account-type parameter to
HOSTED_OR_GOOGLE
. That means ClientLogin will first try to authenticate the user's credentials as a G Suite account. If that fails,
it will try to authenticate as a Google Account. This becomes tricky if user@example.com
is both a Google Account and a G Suite account.
In that special case, set the account type to GOOGLE
if the user wishes to use the Google Accounts version of user@example.com
.
Once the login information has been successfully authenticated, Google returns a token, which your application will reference each time
it requests access to the user's account, such as to GET
or POST
data. The token remains valid for a set length of time,
defined by whichever Google service you're working with. Typically, tokens remain valid for 2 weeks.
Recalling an auth token
After your application has authenticated the user once, there's no need for them to input their credentials again.
We recommend storing the Auth token in your database and recalling it as necessary. That will save the overhead of an additional
HTTPS POST
and a possible CAPTCHA challenge.
The libraries provide getters/setters for accessing the token:
Java
String token = '12345abcde'; // TODO: Read user's token from your database client.setUserToken(token); UserToken auth_token = (UserToken) client.getAuthTokenFactory().getAuthToken(); token = auth_token.getValue(); // token is '12345abcde'
.NET
String token = '12345abcde'; // TODO: Read user's token from your database client.SetAuthenticationToken(token); GDataGAuthRequestFactory requestFactory = (GDataGAuthRequestFactory) client.RequestFactory; token = requestFactory.GAuthToken; // token is '12345abcde'
PHP
$token = '12345abcde'; // TODO: Read user's token from your database $client->getHttpClient()->setClientLoginToken($token); $token = $client->getHttpClient()->getClientLoginToken(); // $token is '12345abcde'
Python
If you're using the newer v2.0+ classes based off of GDClient, use:
import gdata.gauth token = '12345abcde' # TODO: Read user's token from your database client.auth_token = gdata.gauth.ClientLoginToken(token) token = client.auth_token.token_string # token is '12345abcde'
If you're using the older v1.0 classes based off of GDataService, the process is a bit different.
token = '12345abcde' # TODO: Read user's token from your database client.SetClientLoginToken(token) token = client.GetClientLoginToken() # token is '12345abcde'
Handling CAPTCHA challenges
A failure response from ClientLogin contains an error code and a URL to an error page that can be displayed to the user. If the error code is a CAPTCHA challenge, the response also includes a URL to a CAPTCHA image and a special token. Your application should be able to solicit an answer from the user and then retry the login request.
Java
String email = "user@example.com"; String password = "pa$$word"; try { client.setUserCredentials(email, password); } catch (CaptchaRequiredException e) { System.out.println("Please visit " + e.getCaptchaUrl()); System.out.print("Answer to the challenge? "); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String answer = in.readLine(); service.setUserCredentials(email, password, e.getCaptchaToken(), answer); } catch (AuthenticationException e) { System.out.println(e.getMessage()); }
.NET
try { client.setUserCredentials("user@example.com", "pa$$word"); client.QueryAuthenticationToken(); // Authenticate the user immediately } catch (CaptchaRequiredException e) { Console.WriteLine("Please visit " + e.Url); Console.Write("Answer to the challenge? "); String answer = Console.ReadLine(); GDataGAuthRequestFactory requestFactory = (GDataGAuthRequestFactory) client.RequestFactory; requestFactory.CaptchaAnswer = answer; requestFactory.CaptchaToken = e.Token; client.QueryAuthenticationToken(); // authenticate the user again } catch (InvalidCredentialsException e) { Console.WriteLine(e.Message); } catch (AuthenticationException e) { Console.WriteLine(e.Message); }
PHP
$email = 'user@example.com'; $password = 'pa$$word'; $serviceName = 'cl'; // 'cl' is the service name for the Calendar API $appName = 'yourCompany-yourAppName-v1'; try { $httpClient = Zend_Gdata_ClientLogin::getHttpClient($email, $password, $serviceName, null, $appName); } catch (Zend_Gdata_App_CaptchaRequiredException $e) { echo '<a href="' . $e->getCaptchaUrl() . '">CAPTCHA answer required to login</a>'; $answer = 'Your answer to the challenge'; $httpClient = Zend_Gdata_ClientLogin::getHttpClient( $email, $password, $serviceName, null, $appName, $e->getCaptchaToken(), $answer); } catch (Zend_Gdata_App_AuthException $e) { echo 'Error: ' . $e->getMessage(); if ($e->getResponse() != null) { echo 'Body: ' . $e->getResponse()->getBody(); } }
Python
GDClient'ı temel alan yeni v2.0+ sınıflarını kullanıyorsanız:
import gdata.client try: client.ClientLogin(email, password, application_name, service='cl') except gdata.client.CaptchaChallenge as challenge: print 'Please visit ' + challenge.captcha_url answer = raw_input('Answer to the challenge? ') client.ClientLogin(email, password, application_name, captcha_token=challenge.captcha_token, captcha_response=answer) except gdata.client.BadAuthentication: exit('Users credentials were unrecognized') except gdata.client.RequestError: exit('Login Error')
GDataService'e dayalı olarak 1.0 sürümündeki eski sınıfları kullanıyorsanız süreç biraz daha farklıdır.
import gdata.service email = 'user@example.com' password = 'pa$$word' application_name = 'yourCompany-yourAppName-v1' try: client.ClientLogin(email, password, source=application_name) except gdata.service.CaptchaRequired: print 'Please visit ' + client.captcha_url answer = raw_input('Answer to the challenge? ') client.ClientLogin(email, password, source=application_name, captcha_token=client.captcha_token, captcha_response=answer) except gdata.service.BadAuthentication: exit('Users credentials were unrecognized') except gdata.service.Error: exit('Login Error')
CAPTCHA'lar hakkında daha fazla bilgi edinmek için "Yüklü Uygulamalar İçin Kimlik Doğrulama" dokümanlarının ClientLogin Yanıt bölümüne bakın.
Ek Kaynaklar ve Örnekler
- Google Veri API'si İpuçları Blogu'ndaki ClientLogin örnekleri
- Yüklü Uygulamalar İçin Kimlik Doğrulama