Uwierzytelnianie użytkowników

Protokoły uwierzytelniania internetowego wykorzystują funkcje HTTP, ale Aplikacje Chrome działają wewnątrz kontenera aplikacji. Nie są wczytywane przez HTTP, nie mogą wykonywać przekierowań ani ustawiać plików cookie.

Do uwierzytelniania użytkowników używaj interfejsu Chrome Identity API: getAuthToken w przypadku zalogowanych użytkowników. swoje konto Google i launchWebAuthFlow w przypadku użytkowników zalogowanych na konto inne niż Google. Jeśli aplikacja używa własnego serwera do uwierzytelniania użytkowników, musisz użyć tego drugiego.

Jak to działa

Użytkownicy Aplikacji Chrome mają konto Google powiązane ze swoim profilem. Aplikacje mogą otrzymywać tokeny OAuth2 dla tych użytkowników za pomocą interfejsu API getAuthToken.

Aplikacje, które chcą przeprowadzić uwierzytelnianie przy użyciu dostawców tożsamości innych niż Google, muszą wywołać launchWebAuthFlow Ta metoda korzysta z wyskakującego okienka przeglądarki, aby wyświetlać strony dostawcy i przechwytywać przekierowuje użytkownika do konkretnych wzorców adresów URL. Przekierowanie jest przekazywane do aplikacji, a aplikacja je wyodrębnia z adresu URL.

Uwierzytelnianie konta Google

Oto pięć kroków, które musisz wykonać:

  1. Dodaj uprawnienia do pliku manifestu i prześlij aplikację.
  2. Skopiuj klucz z zainstalowanego elementu manifest.json do źródłowego pliku manifestu, aby identyfikator aplikacji pozostaną bez zmian podczas tworzenia aplikacji.
  3. Uzyskaj identyfikator klienta OAuth2 dla aplikacji Chrome.
  4. Zaktualizuj plik manifestu, aby zawierał identyfikator klienta i zakresy.
  5. Uzyskaj token uwierzytelniania.

Dodawanie uprawnień i przesyłanie aplikacji

Sprawdź, czy w pliku manifestu znajduje się uprawnienie dotyczące tożsamości. Następnie możesz przesłać aplikację do stronę zarządzania aplikacjami i rozszerzeniami (patrz Publikowanie).

"permissions": [
  "identity"
]

Skopiuj klucz do pliku manifestu

Gdy rejestrujesz aplikację w konsoli Google OAuth, musisz podać jej identyfikator Identyfikator, który będzie sprawdzany podczas żądań tokenów. Dlatego ważne jest, aby stosować identyfikatora aplikacji w fazie programowania.

Aby identyfikator aplikacji był stały, musisz skopiować klucz z zainstalowanego manifest.json do pliku manifestu źródłowego. Nie jest to najprostsze zadanie, ale wygląda to tak:

  1. Przejdź do katalogu danych użytkowników. Przykład na Macu: ~/Library/Application\ Support/Google/Chrome/Default/Extensions
  2. Wyświetlanie listy zainstalowanych aplikacji i rozszerzeń oraz dopasowanie identyfikatora aplikacji do identyfikatora aplikacji i rozszerzeń strony zarządzania z takim samym identyfikatorem.
  3. Przejdź do katalogu z zainstalowaną aplikacją (będzie to wersja w identyfikatorze aplikacji). Otwórz zainstalowane manifest.json (pico to szybki sposób na otwarcie pliku).
  4. Skopiuj „klucz” w zainstalowanym obiekcie manifest.json i wklej go do źródłowego pliku manifestu aplikacji. .

Uzyskiwanie identyfikatora klienta OAuth2

Aby uzyskać identyfikator klienta, musisz zarejestrować aplikację w Konsoli interfejsów API Google:

  1. Zaloguj się w Konsoli interfejsów API Google przy użyciu tego samego konta Google, które zostało użyte do przesłania aplikacji na konto. w sklepie Chrome Web Store.
  2. Aby utworzyć nowy projekt, rozwiń menu w lewym górnym rogu i kliknij Pozycja menu Utwórz...
  3. Po utworzeniu i nazwaniu przejdź do sekcji „Usługi”. i włącz dowolne i usługach potrzebnych Twojej aplikacji.
  4. Otwórz „Dostęp do interfejsu API”. i kliknij Utwórz klienta OAuth 2.0 ID....
  5. Wpisz wymagane informacje o marce i wybierz typ Zainstalowana aplikacja.
  6. Wybierz Aplikacja Chrome i wpisz identyfikator aplikacji (ten sam identyfikator wyświetlany w aplikacjach i stronie zarządzania rozszerzeniami).
.

Zaktualizuj plik manifestu za pomocą identyfikatora klienta i zakresów OAuth2

Musisz zaktualizować plik manifestu, aby zawierał identyfikator klienta i zakresy. Oto przykład: „oauth2” w przypadku przykładowy dysk gdrive:

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

Uzyskiwanie tokenów dostępu

Możesz teraz uzyskać token uwierzytelniania, wywołując identity.getAuthToken.

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

Interakcja użytkownika

Wywołując funkcję getAuthToken, możesz przekazać flagę ('interactive': true w przykładzie powyżej). wskazujący, czy interfejs API ma być wywoływany w trybie interaktywnym, czy cichym. Jeśli wywołujesz interfejsu API w trybie interaktywnym, w razie potrzeby wyświetla się użytkownikowi strona logowania lub zatwierdzania, na zrzucie ekranu poniżej:

zrzut ekranu przedstawiający interfejs użytkownika, gdy aplikacja używa Identity API do uwierzytelniania konta Google

Jeśli wywołasz interfejs API w trybie cichym, zwróci on token tylko wtedy, gdy możliwe będzie wygenerowanie jeden bez wyświetlania interfejsu użytkownika. Jest to przydatne, gdy aplikacja wykonuje proces podczas uruchamiania, lub w ogóle, gdy nie wymaga gestu użytkownika.

Sprawdzoną metodą jest korzystanie z trybu cichego, gdy nie wykonuje się żadnych działań gestem użytkownika. w trybie interaktywnym po wykryciu gestu użytkownika (na przykład po kliknięciu przycisku Zaloguj się Twojej aplikacji). Pamiętaj, że nie wymagamy używania gestów.

Pamięć podręczna

Chrome ma pamięć podręczną tokenów dostępu, więc w każdej chwili możesz wywołać funkcję getAuthToken za pomocą tokena. Wygaśnięcie tokena jest obsługiwane automatycznie przez pamięć podręczną.

Bieżący stan pamięci podręcznej tokenów możesz sprawdzić na stronie chrome://identity-internals.

W niektórych przypadkach, na przykład gdy użytkownik zmieni hasło, albo wygasłe tokeny dostępu przestanie działać. Wywołania interfejsu API korzystające z tego tokena będą zwracać kod stanu HTTP 401. Jeśli możesz usunąć nieprawidłowy token z pamięci podręcznej Chrome, wywołując identity.removeCachedAuthToken.

Przykład użycia removeCachedAuthToken:

// 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);
      }
    });
  }
}

Uwierzytelnianie przy użyciu konta spoza Google

Oto trzy kroki, które musisz wykonać:

  1. Zarejestruj się u dostawcy.
  2. Dodaj uprawnienia dla zasobów dostawcy, do których aplikacja będzie miała dostęp.
  3. Uzyskaj token uwierzytelniania.

Zarejestruj się u dostawcy

Musisz zarejestrować identyfikator klienta OAuth2 u dostawcy i skonfigurować ten identyfikator jako witrynę. Aby podać identyfikator URI przekierowania podczas rejestracji, użyj adresu URL formularza: https://<extension-id>.chromiumapp.org/<anything-here>

Jeśli np. identyfikator aplikacji to abcdefghijklmnopqrstuvwxyzabcdef i chcesz, żeby provider_cb to ścieżki, aby odróżnić ją od identyfikatorów URI przekierowania od innych dostawców, użyj: https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb

Dodaj uprawnienia dla dostawcy

Aby utworzyć żądania XHR z innych domen dla punktów końcowych interfejsu API dostawcy, musisz dodać do listy dozwolonych odpowiednie wzorców w uprawnieniach:

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

Uzyskiwanie tokena

Aby uzyskać token:

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

<url-to-do-auth> to adres URL używany do uwierzytelniania dostawcy z witryny. Przykład: załóżmy, że wykonujesz przepływ OAuth2 u dostawcy, a Twoja aplikacja została zarejestrowana u niego identyfikator klienta 123456789012345 i chcesz mieć dostęp do zdjęć użytkownika w witrynie dostawcy: 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

Dostawca przeprowadzi uwierzytelnianie i w razie potrzeby wyświetli interfejs logowania lub zatwierdzania, aby użytkownika. Następnie zostanie przekierowany do https://abcdefghijklmnopqrstuvwxyzabcdef.chromiumapp.org/provider_cb#authToken=<auth-token>

Chrome przechwyci to i wywoła wywołanie zwrotne aplikacji z pełnym adresem URL przekierowania. Aplikacja powinno wyodrębnić token z adresu URL.

Tryb interaktywny a tryb cichy

Wywołując funkcję launchWebAuthFlow, możesz przekazać flagę ('interactive': true w przykładzie powyżej). wskazujący, czy interfejs API ma być wywoływany w trybie interaktywnym (inaczej w trybie cichym). Jeśli Gdy wywołasz interfejs API w trybie interaktywnym, w razie potrzeby wyświetli się interfejs użytkownika w celu pobrania tokena (logowania) interfejs użytkownika lub interfejs do zatwierdzania; lub interfejs użytkownika specyficzny dla dostawcy).

Jeśli wywołasz interfejs API w trybie cichym, zwróci on token tylko wtedy, gdy dostawca będzie w stanie podanie tokena bez wyświetlania interfejsu użytkownika. Jest to przydatne w przypadkach, gdy aplikacja wykonuje przepływ w aplikacji podczas uruchamiania, a także w ogóle, gdy nie wymaga użycia gestu użytkownika.

Sprawdzoną metodą jest korzystanie z trybu cichego, gdy nie wykonuje się żadnych działań gestem użytkownika. w trybie interaktywnym po wykryciu gestu użytkownika (na przykład po kliknięciu przycisku Zaloguj się Twojej aplikacji). Pamiętaj, że nie wymagamy używania gestów.