OAuth 2.0: Kullanıcıların kimliğini Google ile doğrulama

OAuth2, yetkilendirme için endüstri standardı protokolüdür. Kullanıcıların web ve masaüstü uygulamalarına kullanıcı adlarını, şifrelerini ve diğer özel kimlik bilgilerini paylaşmadan özel bilgilere erişim izni verebilecekleri bir mekanizma sağlar.

Bu eğitim, bir kullanıcının Google kişilerine Google People API'yi ve Chrome Identity API'yi kullanarak erişen bir uzantı oluşturur. Uzantılar HTTPS üzerinden yüklenmediğinden, yönlendirme gerçekleştiremediğinden veya çerez ayarlayamadığından OAuth2'yi kullanmak için Chrome Identity API'den yararlanır.

Başlayın

Bir dizin ve aşağıdaki başlangıç dosyalarını oluşturarak başlayın.

manifest.json

manifest.json adında bir dosya oluşturup aşağıdaki kodu ekleyerek manifest dosyasını ekleyin.

{
  "name": "OAuth Tutorial FriendBlock",
  "version": "1.0",
  "description": "Uses OAuth to connect to Google's People API and display contacts photos.",
  "manifest_version": 3,
  "action": {
    "default_title": "FriendBlock, friends face's in a block."
  },
  "background": {
    "service_worker": "service-worker.js"
  }
}

hizmet-çalışanı.js

service-worker.js adlı bir dosya oluşturup aşağıdaki kodu dahil ederek uzantı hizmet çalışanını ekleyin.

chrome.action.onClicked.addListener(function() {
  chrome.tabs.create({url: 'index.html'});
});

index.html

index.html adlı bir HTML dosyası ekleyip aşağıdaki kodu ekleyin.

<html>
  <head>
    <title>FriendBlock</title>
    <style>
      button {
        padding: 10px;
        background-color: #3C79F8;
        display: inline-block;
      }
    </style>
  </head>
  <body>
    <button>FriendBlock Contacts</button>
    <div id="friendDiv"></div>
  </body>
</html>

Tutarlı bir uzantı kimliği kullanın

Geliştirme sırasında tek bir kimliğin korunması çok önemlidir. Tutarlı bir kimlik elde etmek için şu adımları uygulayın:

Uzantıyı geliştirici kontrol paneline yükle

Uzantı dizinini bir .zip dosyası olarak paketleyin ve yayınlamadan Chrome Geliştirici Kontrol Paneli'ne yükleyin:

  1. Geliştirici Kontrol Paneli'nde Yeni öğe ekle'yi tıklayın.
  2. Dosyalara göz at'ı tıklayın, uzantının zip dosyasını seçin ve yükleyin.
  3. Paket sekmesine gidin ve Ortak anahtarı görüntüle'yi tıklayın.

Geliştirici Kontrol Paneli Paket sekmesi

Pop-up açıldığında aşağıdaki adımları uygulayın:

  1. -----BEGIN PUBLIC KEY----- ile -----END PUBLIC KEY----- tarihleri arasındaki kodu kopyalayın.
  2. Tek satırlık metin yapmak için yeni satırları kaldırın.

Ortak anahtar pop-up&#39;ı

Kodu "key" alanının altındaki manifest.json öğesine ekleyin. Böylece, uzantı aynı kimliği kullanır.

{ // manifest.json
  "manifest_version": 3,
...
  "key": "ThisKeyIsGoingToBeVeryLong/go8GGC2u3UD9WI3MkmBgyiDPP2OreImEQhPvwpliioUMJmERZK3zPAx72z8MDvGp7Fx7ZlzuZpL4yyp4zXBI+MUhFGoqEh32oYnm4qkS4JpjWva5Ktn4YpAWxd4pSCVs8I4MZms20+yx5OlnlmWQEwQiiIwPPwG1e1jRw0Ak5duPpE3uysVGZXkGhC5FyOFM+oVXwc1kMqrrKnQiMJ3lgh59LjkX4z1cDNX3MomyUMJ+I+DaWC2VdHggB74BNANSd+zkPQeNKg3o7FetlDJya1bk8ofdNBARxHFMBtMXu/ONfCT3Q2kCY9gZDRktmNRiHG/1cXhkIcN1RWrbsCkwIDAQAB",
}

Kimlikleri karşılaştır

chrome://extensions adresindeki Uzantı Yönetimi sayfasını açın, Geliştirici modunun etkinleştirildiğinden emin olun ve paketlenmemiş uzantı dizinini yükleyin. Uzantı yönetimi sayfasındaki uzantı kimliğini, Geliştirici Kontrol Paneli'ndeki Öğe Kimliği ile karşılaştırın. Bunların eşleşmesi gerekir.

Uzantı eşleşmesinin
kimliği,

OAuth istemci kimliği oluşturun

Google API konsoluna gidin ve yeni bir proje oluşturun. Hazır olduğunda kenar çubuğundan Credentials'ı (Kimlik bilgileri) seçin, Create Authentication'ı (Kimlik bilgileri oluştur) tıklayın ve OAuth client ID'yi (OAuth istemci kimliği) seçin.

Uzantı için kimlik bilgileri oluşturun

İstemci kimliği oluştur sayfasında Chrome Uzantısı'nı seçin. Uzantının adını doldurun ve Uygulama Kimliği alanında URL'nin sonuna uzantı kimliğini girin.

Uzantı bilgilerini doldurun

Oluştur'u tıklayarak işlemi tamamlayın. Konsolda bir OAuth istemci kimliği sağlanır.

OAuth'u manifest dosyasına kaydedin

Uzantı manifestine "oauth2" alanını ekleyin. Oluşturulan OAuth istemci kimliğini "client_id" altına yerleştirin. Şimdilik "scopes" öğesine boş bir dize ekleyin.

{
  "name": "OAuth Tutorial FriendBlock",
  ...
  "oauth2": {
    "client_id": "yourExtensionOAuthClientIDWillGoHere.apps.googleusercontent.com",
    "scopes":[""]
  },
  ...
}

İlk OAuth akışını başlat

Manifest'te identity iznini kaydedin.

{
  "name": "OAuth Tutorial FriendBlock",
  ...
  "permissions": [
    "identity"
  ],
  ...
}

OAuth akışını yönetmek için oauth.js adlı dosyayı oluşturup aşağıdaki kodu ekleyin.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {
    chrome.identity.getAuthToken({interactive: true}, function(token) {
      console.log(token);
    });
  });
};

oauth.js için index.html etiketinin başına bir komut dosyası etiketi yerleştirin.

...
  <head>
    <title>FriendBlock</title>
    ...
    <script type="text/javascript" src="oauth.js"></script>
  </head>
...

Uzantıyı yeniden yükleyin ve index.html uygulamasını açmak için tarayıcı simgesini tıklayın. Konsolu açın ve "FriendBlock Contacts" düğmesini tıklayın. Konsolda bir OAuth jetonu görünür.

Jetonu konsolda görüntüleyin

Google People API'yi etkinleştirme

Google API konsoluna dönün ve kenar çubuğundan Kitaplık'ı seçin. "Google People API"yi arayın, doğru sonucu tıklayın ve etkinleştirin.

People API&#39;yi etkinleştirme

Google People API istemci kitaplığını uzantı manifestindeki "scopes" öğesine ekleyin.

{
  "name": "OAuth Tutorial FriendBlock",
  ...
  "oauth2": {
    "client_id": "yourExtensionOAuthClientIDWillGoHere.apps.googleusercontent.com",
    "scopes": [
      "https://www.googleapis.com/auth/contacts.readonly"
    ]
  },
  ...
}

Google API Konsolu'na ve kimlik bilgilerine geri dönün. "Kimlik bilgileri oluştur"u tıklayın ve açılır menüden "API anahtarı"nı seçin.

People API kimlik bilgileri oluşturma

Oluşturulan API anahtarını daha sonra kullanmak için saklayın.

İlk API isteğini oluşturma

Uzantı artık uygun izinlere ve kimlik bilgilerine sahip olduğu ve bir Google kullanıcısını yetkilendirebildiği için People API aracılığıyla veri isteğinde bulunabilir. oauth.js içindeki kodu aşağıdakiyle eşleşecek şekilde güncelleyin.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {
    chrome.identity.getAuthToken({interactive: true}, function(token) {
      let init = {
        method: 'GET',
        async: true,
        headers: {
          Authorization: 'Bearer ' + token,
          'Content-Type': 'application/json'
        },
        'contentType': 'json'
      };
      fetch(
          'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=API_KEY',
          init)
          .then((response) => response.json())
          .then(function(data) {
            console.log(data)
          });
    });
  });
};

API_KEY kısmını Google API konsolundan oluşturulan API anahtarıyla değiştirin. Uzantı, memberResourceNames alanının altında bir people/account_id dizisi içeren bir JSON nesnesi günlüğe kaydedmelidir.

Yüzleri engelle

Uzantı artık kullanıcının kişilerinin bir listesini döndürdüğüne göre, bu kişilerin profillerini ve bilgilerini almak için ek isteklerde bulunabilir . Uzantı, kullanıcı kişilerinin fotoğraf bilgilerini almak için memberResourceNames özelliğini kullanır. oauth.js öğesini aşağıdaki kodu içerecek şekilde güncelleyin.

window.onload = function() {
  document.querySelector('button').addEventListener('click', function() {
    chrome.identity.getAuthToken({interactive: true}, function(token) {
      let init = {
        method: 'GET',
        async: true,
        headers: {
          Authorization: 'Bearer ' + token,
          'Content-Type': 'application/json'
        },
        'contentType': 'json'
      };
      fetch(
          'https://people.googleapis.com/v1/contactGroups/all?maxMembers=20&key=<API_Key_Here>',
          init)
          .then((response) => response.json())
          .then(function(data) {
            let photoDiv = document.querySelector('#friendDiv');
            let returnedContacts = data.memberResourceNames;
            for (let i = 0; i < returnedContacts.length; i++) {
              fetch(
                  'https://people.googleapis.com/v1/' + returnedContacts[i] +
                      '?personFields=photos&key=API_KEY',
                  init)
                  .then((response) => response.json())
                  .then(function(data) {
                    let profileImg = document.createElement('img');
                    profileImg.src = data.photos[0].url;
                    photoDiv.appendChild(profileImg);
                  });
            };
          });
    });
  });
};

Yeniden yükleyin ve uzantıya geri dönün. FriendBlock düğmesini tıklayın ve ta-da! Kişilerin yüzlerini blok halinde görebilirsiniz.

Bir bloktaki kişi yüzleri