Php ile Google OAuth 2.0’ı kullanma

Bu doküman, web sunucusu uygulamalarının, Google API’larına erişmek için OAuth 2.0 yetkilendirmesini uygulamak için PHP için Google API İstemci Kitaplığını nasıl kullandığını açıklamaktadır. OAuth 2.0, kullanıcıların belirli verileri kullanıcı adı, şifre ve diğer bilgileri gizli tutarken bir uygulama ile paylaşmasına olanak tanır. Örneğin, bir uygulama, kullanıcılardan Google Drive’larına dosya depolamasına izin vermek için OAuth 2.0’ı kullanabilir. Bu OAuth 2.0 akışı, özellikle kullanıcı yetkilendirme amaçlıdır. Gizli bilgileri saklayabilen ve devleti koruyabilen uygulamalar için tasarlanmıştır. Doğru olarak yetkili bir web sunucusu uygulaması, kullanıcı uygulama ile etkileşimde bulunulduğunda veya kullanıcı uygulamadan çıktığında API’ya erişebilir. Web sunucusu uygulamaları, özellikle kullanıcıya özgü veriler yerine proje tabanlı verilere erişmek için Cloud API’leri çağırırken API isteklerini yetkilendirmek için hizmet hesaplarını da kullanır. Web sunucusu uygulamaları, hizmet yetkilendirmelerini kullanıcı yetkilendirmesiyle birlikte kullanabilir.

Google OAuth 2.0’ı kullanma


Projeniz için API’ları etkinleştirin

  1. Buradan Google’ın kütüphanesini açalm
  2. Uygulamanızla ilişkili projeyi seçin. Zaten bir proje yoksa bir proje oluşturun.
  3. Kullanılacak olan apiyi etkinleştirin.

Yetki kimlik bilgilerini oluştur

Google API’larına erişmek için OAuth 2.0 kullanan herhangi bir uygulama, uygulamayı Google’ın OAuth 2.0 sunucusuna tanıtan yetkilendirme kimlik bilgilerine sahip olmalıdır. Aşağıdaki adımlar, projeniz için kimlik bilgilerini nasıl oluşturacağınızı açıklar. Uygulamalarınız, o proje için etkinleştirdiğiniz API’lere erişmek için kimlik bilgilerini kullanabilir.

  • Soldaki menuden kimlik bilgileri sekmesine gelelim. Kimlik bilgilerini oluştur  butonundan OAuth istemci kimliğine tıklayalım.

  • Biz Php dilini kullandığımız için Web uygulamasını seçerek Client Adını giriyoruz. Burada Dikkat etmemiz gereken nokta Yetkilendirilmiş kaynaklar ve yönlendirmeler kutuları
  • Yetkilendirilmiş kaynaklar bizim apimize hangi web site üzerinden istek atacağıdız. Ben bilgisayarım üzerinden çalıştığım ve istek attığım için Http://localhost olarak girdim eğer web sitem üzerinden erişmek isteseydim o zaman http://www.apikutuphanesi.com gibi bir url girecektik.
  • Yetkilendirilmiş yönlendirme url : Bu kutucuk ise access tokeni aldıktan sonraki yönlendirme kısmındaki url olacak.

  • Oluştur diyerek yeni bir istemci kimliğine sahip olduk. Yeni oluşturmuş olduğumuz bu istemci kimliğine tıklayarak json olarak indiriyoruz. Bu jsonu ileride kullanacağız.

Google Kütüphanelerini Yüklemek

  1. Google Api Php Cilenti  indiriyoruz. GitHub.com  sitesinde paylaşılmış olan Google Api Clienti Buradan  zip dosyası olarak indirelim. Bu bi kenarda kalsın.
  2. Besteleyiciyi buradan indirerek kuralım. Zaten Exe dosyası olarak indiriyoruz. Developer kutucuğunu işaretleyip next next diyerek kuruyoruz.
  3. İndiriğimiz Google api php clienti php sunucumuzun çalıştığı klasörde yeni bir kalsör açarak içersine çıkaralım
  4. Bu klasör içerisinde Shift + Sağ Tuşa tıklayarak PowerShell Penceresini burada aç diyelim.

Yukarıdaki resimde daha önceden yükleme yaparak denediğim için biraz kalabalık gözüküyor fakat en alt kısmına bakın şu kodu yazıyoruz :

composer update

Powershell penceresinde bu kodu yazarak vendor klasörünü de yüklemiş olacağız. Bu işlemleri gerçekleştirdikten sonra aşağıdaki resme göz atalım.

Burada jsondrive.json dosyası istemci kimliği olarak indirdiğimiz json dosyamız ben ismini değiştirerek jsondrive yaptım. index.php ve oauth2callback.php dosyasını da ben oluşturdum diğer dosyalar yukarıdaki adımları uygulayarak edineceğimiz dosyalardı.

Basit Bir Google Drive Projesi

Yukarıdaki adımlarda herhangi bir problem yaşamadıysak artık kodlama için kütüphanemiz hazır. Kodlamaya başlayabiliriz.  Şimdiye kadar neler yaptık.

  • console.developers.google.com’da Projemizi oluşturduk
  • Kullanacağımız apiyi etkinleştirdik
  • OAuth istemci kimliğini oluşturduk ve oluşturuken sitemize gerekli izinleri verdik.
  • OAuth istemci kimliğinin json dosyasını indirdik
  • GitHub dan Google Client Api kütüphanesini indirdik
  • Composer yardımıyla Vendor  klasörümüzü de edindik

Bu adımları yapmayıp gerekli kütüphaneleri indirmediyseniz Google’ın OAuth erişimi isteyen Apilerini kullanamazsınız.

Oluşturmuş oluğumuz yeniklasörümüzün içerisine 2 tane php dosyası oluşturalım

  • index.php
  • oauth2callback.php

index.php dosyasının içerisine 

<?php
require_once __DIR__.'/vendor/autoload.php';
session_start();
$client = new Google_Client();
$client->setAuthConfig('jsondrive.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())->getFiles();
echo "<pre>";
 print_r($files);
} else {
 $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/googleapi/oauth2callback.php';
 header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

oauth2callback.php dosyasını içerisine

<?php
require_once __DIR__.'/vendor/autoload.php';
session_start();

$client = new Google_Client();
$client->setAuthConfigFile('jsondrive.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/googleapi/oauth2callback.php');
$client->addScope(Google_Service_Drive::DRIVE_METADATA_READONLY);

if (! isset($_GET['code'])) {
 $auth_url = $client->createAuthUrl();
 header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
 $client->authenticate($_GET['code']);
 $_SESSION['access_token'] = $client->getAccessToken();
 $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/googleapi/';
 header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}

Kodları tabiki düzenlemeniz gerekiyor. Buraya indirdiğimiz json dosyasının yolu gelecek ve yönlendireme kodlarını kendimize göre düzenlememiz gerekiyor.

$client->setAuthConfigFile('jsondrive.json');

Karşılaşılabilecek hatalar

Eğer redirect_uri_mismatch hatası alıyorsak bu google oauth istemci kimliğini oluştururken yetkilendirme kutucuklarında bir yanlış url girmekten meydana gelmektedir. Bunu düzeltmeniz gerekir.

Eğer böyle bir hata alıyorsanız muhtemelen token süresi bitmiştir yenilemeniz gerekmektedir.

 

2 thoughts on “Php ile Google OAuth 2.0’ı kullanma”

  1. Hocam eline sağlık, çok güzel bilgiler.
    Benim 2 sorum olacaktı.

    Birincisi, google search console verilerini de API yolu ile çekebiliyor muyuz?

    İkincisi ise, kendi iki farklı web uygulamamız için hazırlanmış JSON endpointler için kendi oauth2 sistemimizi kurup otomatikleştirebiliyor muyuz?

    1. Merhabalar Onur Bey Google Seacth Console’in bazı verilerini Api ile çekebiliyoruz. Bunlar

      • webmasters.searchanalytics.query
      • webmasters.sitemaps.delete
      • webmasters.sitemaps.get
      • webmasters.sitemaps.list
      • webmasters.sitemaps.submit
      • webmasters.sites.add
      • webmasters.sites.delete
      • webmasters.sites.get
      • webmasters.sites.list

      Google Java ve Python dilleri ile Google Search Console Api kullanımına destek vermektedir.

      2. Sorunuz için Otomatikleştirmekten kastınız nedir? Google seacth console apisi ile kendi sisteminizi birleştirip otomatik olarak girmesinden bahsediyorsanız oauth2’da bildiğiniz gibi kullanıcı giriş yapıp access tokenin alınması gerekiyor. Web kısmında oauth süreci diğer apilerde olduğu gibi fakat Java ve Python için access token alım adımları farklılaşabilir. Otomatikleştirmek derken aklınızdaki tam olarak ney biraz daha açarsanız üzerinde konuşmak daha kolay olacaktır.

      Kolay gelsin iyi çalışmalar.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir