Kullanıcı Kimlik Doğrulaması

Web kimlik doğrulama protokolleri HTTP özelliklerini kullanır ancak Chrome Uygulamaları, uygulama kapsayıcısının içinde çalışır; HTTP üzerinden yüklenmez ve yönlendirme yapamaz ya da çerez ayarlayamaz.

Kullanıcıların kimliğini doğrulamak için Chrome Identity API'yi kullanın: giriş yapan kullanıcılar için getAuthToken Google Hesabı ve Google dışı bir hesaba giriş yapan kullanıcılar için launchWebAuthFlow. Eğer uygulamanız kullanıcıların kimliğini doğrulamak için kendi sunucusunu kullanır, ikinci sunucuyu kullanmanız gerekir.

İşleyiş şekli

Chrome Uygulamaları kullanıcılarının, profilleriyle ilişkili bir Google Hesabı vardır. Uygulamalar OAuth2 jetonları alabilir bu kullanıcılar için getAuthToken API'yi kullanıyor.

Google dışı kimlik sağlayıcılarla kimlik doğrulaması gerçekleştirmek isteyen uygulamaların launchWebAuthFlow Bu yöntemde, sağlayıcı sayfalarını göstermek için bir tarayıcı pop-up'ı kullanılır ve belirli URL kalıplarına yönlendirir. Yönlendirme URL'leri uygulamaya iletilir ve uygulama, URL'den çıkarır.

Google hesabı kimlik doğrulaması

Tamamlamanız gereken beş adım şunlardır:

  1. Manifest dosyanıza izin ekleyin ve uygulamanızı yükleyin.
  2. Uygulama kimliğinizin yüklü olması için yüklü manifest.json dosyasındaki anahtarı kaynak manifestinize kopyalayın. sabit kalır.
  3. Chrome Uygulamanız için bir OAuth2 istemci kimliği alın.
  4. Manifest dosyanızı, istemci kimliğini ve kapsamları içerecek şekilde güncelleyin.
  5. Kimlik doğrulama jetonunu alın.

İzin ekleyin ve uygulamayı yükleyin

Manifest'inizde kimlik izninin bulunduğundan emin olmanız gerekir. Ardından uygulamanızı uygulama ve uzantı yönetimi sayfasını ziyaret edin (Yayınlama bölümüne bakın).

"permissions": [
  "identity"
]

Anahtarı manifest dosyanıza kopyalayın

Uygulamanızı Google OAuth konsoluna kaydettiğinizde uygulamanızın Jeton istekleri sırasında kontrol edilecek kimlik. Bu nedenle, çalıştığınız kurumda uygulama kimliğini kullanın.

Uygulama kimliğinizi sabit tutmak için yüklü manifest.json içindeki anahtarı kaynak manifest dosyanız. Çok incelikli bir görev olmasa da şöyle ilerler:

  1. Kullanıcı verileri dizininize gidin. macOS'te örnek: ~/Library/Application\ Support/Google/Chrome/Default/Extensions.
  2. Yüklü uygulamaları ve uzantıları listeleyin ve uygulamalar ile uzantılardaki uygulama kimliğinizle eşleştirin aynı kimliğe sahip olmalıdır.
  3. Yüklü uygulama dizinine gidin (bu, uygulama kimliği içindeki bir sürüm olacaktır). Yüklü olanları aç manifest.json (pico dosyayı açmanın hızlı bir yoludur).
  4. "Anahtar"ı kopyalayın Yüklü manifest.json dosyasına kaydedin ve uygulamanızın kaynak manifestine yapıştırın dosyası olarak kaydedebilirsiniz.

OAuth2 istemci kimliğinizi alın

İstemci kimliğini almak için uygulamanızı Google API'leri Konsolu'na kaydetmeniz gerekir:

  1. Uygulamanızı yüklemek için kullandığınız Google Hesabı ile Google API'leri Konsolu'na giriş yapın Chrome Web Mağazası.
  2. Yeni proje oluşturmak için sol üst köşedeki açılır menüyü genişletin ve Oluştur... menü öğesi.
  3. Hesabı oluşturup adlandırdıktan sonra "Hizmetler"e gidin gezinme menüsü öğesini açın ve herhangi bir Google en iyi uygulamaları paylaşacağız.
  4. "API Erişimi"ne gidin gezinme menüsü öğesine gidin ve Create an OAuth 2.0 client'ı (OAuth 2.0 istemcisi oluştur) tıklayın. ID... mavi düğme
  5. İstenen marka bilgilerini girin ve Yüklü uygulama türünü seçin.
  6. Chrome Uygulaması'nı seçin ve uygulama kimliğinizi (uygulamalarda ve uzantı yönetimi sayfası) ekleyebilirsiniz.
ziyaret edin.

Manifest dosyanızı OAuth2 istemci kimliği ve kapsamlarıyla güncelleyin

Manifest dosyanızı, istemci kimliğini ve kapsamları içerecek şekilde güncellemeniz gerekir. "oauth2" örneğini burada bulabilirsiniz şunun için: gdrive örneği:

"oauth2": {
    "client_id": "665859454684.apps.googleusercontent.com",
    "scopes": [
      "https://www.googleapis.com/auth/drive"
    ]
  }

Erişim jetonları al

Artık identity.getAuthToken kimliğini çağırarak yetkilendirme jetonunu almaya hazırsınız.

chrome.identity.getAuthToken({ 'interactive': true }, function(token) {
  // Use the token.
});

Kullanıcı etkileşimi

getAuthToken öğesini çağırırken bir işaret aktarabilirsiniz (yukarıdaki örnekte 'interactive': true) Bu değer, API'nin etkileşimli modda mı yoksa sessiz modda mı çağrılmasını istediğinizi belirtir. Bir API'yi etkileşimli modda yaptığında, kullanıcıya gerektiği durumlarda oturum açma ve/veya onay kullanıcı arayüzü gösterilir. aşağıdaki ekran görüntüsünde bulabilirsiniz:

bir uygulamanın, bir Google hesabının kimliğini doğrulamak için Identity API'yi kullanmasıyla ilgili kullanıcı arayüzünü gösteren ekran görüntüsü

API'yi sessiz modda çağırırsanız API, yalnızca hiç bir kullanıcı arayüzü göstermeden. Bu özellik, bir uygulama başlatma sırasında akışı gerçekleştiriyorsa kullanıcı hareketinin olmadığı durumlarda kullanılabilir.

Önerdiğimiz en iyi uygulama, kullanıcı hareketi olmasa da sessiz modun kullanılmasıdır. kullanıcı hareketi varsa (örneğin, kullanıcı oturum açma sayfasında Oturum Aç düğmesini tıkladıysa) ekleyin). Herhangi bir hareket şartı uygulamadığımızı unutmayın.

Önbelleğe alma

Chrome'da, erişim jetonları için bellekte yer alan bir önbellek bulunur. Böylece, getAuthToken sağlayıcısını istediğiniz zaman çağırabilirsiniz jeton kullanın. Jetonun geçerlilik süresi, önbellek tarafından otomatik olarak işlenir.

Jeton önbelleğinin mevcut durumunu chrome://identity-internals üzerinde görebilirsiniz.

Kullanıcının şifresini değiştirmesi, süresi dolmamış erişim jetonlarının alınması gibi bazı durumlar vardır. çalışmayı durduracak. Jetonu kullanan API çağrıları, HTTP durum kodu 401 ile döndürülmeye başlayacaktır. Eğer bunun olduğunu tespit ederseniz identity.removeCachedAuthToken.

removeCachedAuthToken kullanımına örnek:

// callback = function (error, httpStatus, responseText);
function authenticatedXhr(method, url, callback) {
  var retry = true;
  function getTokenAndXhr() {
    chrome.identity.getAuthToken({/* details */},
                                 function (access_token) {
      if (chrome.runtime.lastError) {
        callback(chrome.runtime.lastError);
        return;
      }

      var xhr = new XMLHttpRequest();
      xhr.open(method, url);
      xhr.setRequestHeader('Authorization',
                           'Bearer ' + access_token);

      xhr.onload = function () {
        if (this.status === 401 && retry) {
          // This status may indicate that the cached
          // access token was invalid. Retry once with
          // a fresh token.
          retry = false;
          chrome.identity.removeCachedAuthToken(
              { 'token': access_token },
              getTokenAndXhr);
          return;
        }

        callback(null, this.status, this.responseText);
      }
    });
  }
}

Google dışı hesap kimlik doğrulaması

Tamamlamanız gereken üç adım şunlardır:

  1. Sağlayıcıya kaydolun.
  2. Uygulamanızın erişeceği sağlayıcı kaynakları için izinler ekleyin.
  3. Kimlik doğrulama jetonunu alın.

Sağlayıcıya kaydol

Sağlayıcıya OAuth2 istemci kimliği kaydetmeniz ve istemci kimliğini web sitesi olarak yapılandırmanız gerekir. Kayıt sırasında girilecek yönlendirme URI'si için formun URL'sini kullanın: https://<extension-id>.chromiumapp.org/<anything-here>.

Örneğin, uygulama kimliğiniz abcdefghijklmnopqrstuvwxyzabcdef ise ve provider_cb diğer sağlayıcılardan yönlendirme URI'leri ile ayırt etmek için şunu kullanmalısınız: https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb

Sağlayıcı için izin ekleyin

Sağlayıcı API uç noktalarına kaynaklar arası XHR'ler oluşturmak için uygun izinlerdeki kalıplar:

"permissions": [
  ...
  "https://www.website-of-provider-with-user-photos.com/photos/*"
]

Jetonu al

Jetonu almak için:

chrome.identity.launchWebAuthFlow(
  {'url': '<url-to-do-auth>', 'interactive': true},
  function(redirect_url) { /* Extract token from redirect_url */ });

<url-to-do-auth>, bir web sitesinden sağlayıcıya kimlik doğrulaması yapmak için kullanılan URL'dir. Örneğin, OAuth2 akışını bir sağlayıcıyla gerçekleştirdiğinizi ve uygulamanızı istemci kimliği 123456789012345 ve sağlayıcının web sitesindeki kullanıcı fotoğraflarına erişmek istiyorsanız: https://www.website-of-provider-with-user-photos.com/dialog/oauth?client_id=123456789012345& redirect_uri=https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb&response_type=token&scope=user_photos.

Sağlayıcı, kimlik doğrulama gerçekleştirecek ve uygunsa giriş ve/veya onay kullanıcı arayüzünü şu kullanıcılara gösterir: gösterir. Daha sonra, https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb#authToken=<auth-token>.

Chrome bunu yakalar ve tam yönlendirme URL'si ile uygulamanın geri çağırma işlevini çağırır. Uygulama jetonu URL'nin dışına çıkarması gerekir.

Etkileşimli ve sessiz mod karşılaştırması

launchWebAuthFlow öğesini çağırırken bir işaret aktarabilirsiniz (yukarıdaki örnekte 'interactive': true) API'nin etkileşimli modda (sessiz modda) çağrılmasını isteyip istemediğinizi belirtir. Eğer API'yi etkileşimli modda çağırırsanız, jetonu almak için gerekirse kullanıcıya kullanıcı arayüzü gösterilir (oturum açma Kullanıcı arayüzü ve/veya onay arayüzü; veya sağlayıcıya özel bir arayüzde size yardımcı olabilir.

API'yi sessiz modda çağırırsanız API, yalnızca sağlayıcının aşağıdaki işlemleri yapabilmesi durumunda bir jeton döndürür: herhangi bir kullanıcı arayüzü göstermeden bir jeton sağlayabilir. Bu, bir uygulamanın, akışı uygulamada yaptığı durumlarda yararlıdır başlatma sırasında veya genel olarak kullanıcı hareketinin olmadığı durumlarda yapılır.

Önerdiğimiz en iyi uygulama, kullanıcı hareketi olmasa da sessiz modun kullanılmasıdır. kullanıcı hareketi varsa (örneğin, kullanıcı oturum açma sayfasında Oturum Aç düğmesini tıkladıysa) ekleyin). Hareket şartını zorunlu kılmadığımızı unutmayın.