Krótkie wprowadzenie do uwierzytelniania z protokołem OAuth

Interfejs Gemini API umożliwia pobieranie semantyczne danych własnych. To Twoje dane, dlatego wymagają bardziej rygorystycznej kontroli dostępu niż klucze interfejsu API.

W tym krótkim wprowadzeniu używamy uproszczonej metody uwierzytelniania, która jest odpowiednia dla środowiska testowego. W przypadku środowiska produkcyjnego dowiedz się więcej o uwierzytelnianiu i autoryzacji, zanim wybierzesz dane logowania odpowiednie dla aplikacji.

Cele

  • Konfigurowanie protokołu OAuth w projekcie w chmurze
  • Konfigurowanie domyślnych danych logowania aplikacji
  • Zarządzaj danymi logowania w swoim programie zamiast używać usługi gcloud auth

Wymagania wstępne

Aby uruchomić to krótkie wprowadzenie, musisz mieć:

Konfigurowanie projektu w chmurze

Aby ukończyć to krótkie wprowadzenie, musisz najpierw skonfigurować swój projekt Cloud.

1. Włącz API

Zanim zaczniesz korzystać z interfejsów API Google, musisz włączyć je w projekcie Google Cloud.

2. Konfigurowanie ekranu zgody OAuth

Następnie skonfiguruj ekran zgody OAuth projektu i dodaj siebie jako użytkownika testowego. Jeśli ten krok został już wykonany w Twoim projekcie Cloud, przejdź do następnej sekcji.

  1. W konsoli Google Cloud otwórz Menu > Interfejsy API i usługi > Ekran zgody OAuth.

    Otwórz ekran zgody OAuth

  2. Jako typ użytkownika aplikacji wybierz Zewnętrzny, a potem kliknij Utwórz.

  3. Wypełnij formularz rejestracji aplikacji (większość pól możesz pozostawić puste), a następnie kliknij Zapisz i kontynuuj.

  4. Na razie możesz pominąć dodawanie zakresów i kliknąć Zapisz i kontynuuj. W przyszłości, gdy będziesz tworzyć aplikację do użytku poza organizacją Google Workspace, musisz dodać i zweryfikować zakresy autoryzacji wymagane przez tę aplikację.

  5. Dodawanie użytkowników testowych:

    1. W sekcji Użytkownicy testowi kliknij Dodaj użytkowników.
    2. Wpisz swój adres e-mail i pozostałych upoważnionych użytkowników testowych, a następnie kliknij Zapisz i kontynuuj.
  6. Przejrzyj podsumowanie rejestracji aplikacji. Aby wprowadzić zmiany, kliknij Edytuj. Jeśli rejestracja aplikacji wygląda na prawidłową, kliknij Back to Dashboard (Powrót do panelu).

3. Autoryzacja danych logowania dla aplikacji komputerowej

Aby uwierzytelnić się jako użytkownik i uzyskać dostęp do danych użytkownika w aplikacji, musisz utworzyć co najmniej 1 identyfikator klienta OAuth 2.0. Identyfikator klienta wskazuje konkretną aplikację na serwerach OAuth Google. Jeśli Twoja aplikacja działa na wielu platformach, musisz utworzyć osobny identyfikator klienta dla każdej z nich.

  1. W konsoli Google Cloud otwórz Menu > Interfejsy API i usługi > Dane logowania.

    Otwórz stronę Dane logowania

  2. Kliknij Utwórz dane logowania > Identyfikator klienta OAuth.

  3. Kliknij Typ aplikacji > Aplikacja komputerowa.

  4. W polu Nazwa wpisz nazwę danych logowania. Ta nazwa jest widoczna tylko w konsoli Google Cloud.

  5. Kliknij Utwórz. Pojawi się ekran utworzony przez klienta OAuth zawierający nowy identyfikator klienta i tajny klucz klienta.

  6. Kliknij OK. Nowo utworzone dane logowania pojawią się w sekcji Identyfikatory klienta OAuth 2.0.

  7. Kliknij przycisk pobierania, aby zapisać plik JSON. Zostanie on zapisany jako client_secret_<identifier>.json, zmieni się na client_secret.json i przenieś do katalogu roboczego.

Konfigurowanie domyślnych danych logowania aplikacji

Aby przekonwertować plik client_secret.json na użyteczne dane logowania, przekaż jego lokalizację argumentu --client-id-file polecenia gcloud auth application-default login.

gcloud auth application-default login \
    --client-id-file=client_secret.json \
    --scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.retriever'

Uproszczona konfiguracja projektu opisana w tym samouczku powoduje wyświetlenie okna „Ta aplikacja nie została zweryfikowana przez Google”. To normalne, kliknij „kontynuuj”.

Utworzony token zostanie umieszczony w dobrze znanej lokalizacji, dzięki czemu gcloud lub biblioteki klienta będą mieć do niego dostęp.

gcloud auth application-default login 
--no-browser --client-id-file=client_secret.json
--scopes='https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/generative-language.retriever'

Po ustawieniu domyślnych danych logowania aplikacji (ACD) w większości języków nie ma potrzeby ich znajdowania w bibliotekach klienta.

Włosy do włosów

Najszybszym sposobem na sprawdzenie, czy to działa, jest użycie go do uzyskania dostępu do interfejsu API REST za pomocą narzędzia curl:

access_token=$(gcloud auth application-default print-access-token)
project_id=<MY PROJECT ID>

curl -X GET https://generativelanguage.googleapis.com/v1/models \
    -H 'Content-Type: application/json' \
    -H "Authorization: Bearer ${access_token}" \
    -H "x-goog-user-project: ${project_id}" | grep '"name"'

Python

W Pythonie biblioteki klienta powinny znaleźć je automatycznie:

pip install google-generativeai

Minimalny skrypt do przetestowania może wyglądać tak:

import google.generativeai as genai

print('Available base models:', [m.name for m in genai.list_models()])

Dalsze kroki

Jeśli to działa, możesz skorzystać z semantycznego pobierania danych tekstowych.

Samodzielne zarządzanie danymi logowania [Python]

W wielu przypadkach nie ma polecenia gcloud, które pozwala utworzyć token dostępu na podstawie identyfikatora klienta (client_secret.json). Google udostępnia biblioteki w wielu językach, które umożliwiają zarządzanie tym procesem w aplikacji. W tej sekcji omawiamy ten proces w Pythonie. W dokumentacji interfejsu Drive API znajdziesz równoważne przykłady tej procedury w innych językach.

1. Zainstaluj niezbędne biblioteki

Zainstaluj bibliotekę klienta Google dla języka Python i bibliotekę klienta Gemini.

pip install --upgrade -q google-api-python-client google-auth-httplib2 google-auth-oauthlib

pip install google-generativeai

2. Zapisywanie menedżera danych logowania

Aby zminimalizować liczbę kliknięć na kolejnych ekranach autoryzacji, utwórz w katalogu roboczym plik o nazwie load_creds.py, aby zapisać w pamięci podręcznej plik token.json, którego można użyć później, lub odświeżyć, jeśli straci ważność.

Zacznij od tego kodu, aby przekonwertować plik client_secret.json na token, którego można używać w genai.configure:

import os.path

from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow

SCOPES = ['https://www.googleapis.com/auth/generative-language.retriever']

def load_creds():
    """Converts `client_secret.json` to a credential object.

    This function caches the generated tokens to minimize the use of the
    consent screen.
    """
    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'client_secret.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())
    return creds

3. Pisanie programu

Teraz utwórz script.py:

import pprint
import google.generativeai as genai
from load_creds import load_creds

creds = load_creds()

genai.configure(credentials=creds)

print()
print('Available base models:', [m.name for m in genai.list_models()])

4. Uruchom program

W katalogu roboczym uruchom przykład:

python script.py

Przy pierwszym uruchomieniu skryptu otwiera się okno przeglądarki z prośbą o autoryzację dostępu.

  1. Jeśli nie zalogujesz się na konto Google, pojawi się prośba o zalogowanie. Jeśli w danym momencie korzystasz z wielu kont, podczas konfigurowania projektu wybierz konto ustawione jako „Konto testowe”.

  2. Informacje o autoryzacji są przechowywane w systemie plików, więc przy następnym uruchomieniu przykładowego kodu nie pojawi się prośba o autoryzację.

Uwierzytelnianie zostało skonfigurowane.