Ausgabe von Firebase-Authentifizierungstoken in Python und Token-Validierung mit Fast API

Dinge die zu tun sind

Holen Sie sich mit Firebase und Fast API das Token auf der Clientseite, fügen Sie es in den Header ein, wenn Sie auf Ihre eigene API treffen, und überprüfen Sie auf der Serverseite, ob Sie angemeldet sind. Hier überprüfen wir das Token mit firebase_admin von Google.

Stellen Sie einen Token aus

Aktivieren Sie die Kennwortanmeldung unter Authentifizierung in der Firebase-Konsole und erstellen Sie ein geeignetes Konto, wie unten gezeigt. Hier melden Sie sich damit an.

EMAIL = '[email protected]'
PASSWORD = 'password'

Installieren Sie, was Sie brauchen.

$ pip install requests

Holen Sie sich den folgenden JSON von der Firebase-Konsole und fügen Sie ihn in eine schöne Form ein. (Verwenden Sie eigentlich nur "apiKey")

CONFIG = {
    "apiKey": "YOUR API KEY",
    "authDomain": "YOURPROJECTID.firebaseapp.com",
    "databaseURL": "https://YOURPROJECTID.firebaseio.com",
    "projectId": "YOUR PROJECT ID",
    "storageBucket": "YOUR PROJECT ID.appspot.com",
    "messagingSenderId": "YOUR MESSAGE SENDER ID",
    "appId": "YOUR:APP:ID",
    "measurementId": "YOUR MEASUREMENT ID"
}

Klicken Sie auf die REST-API von Firebase Auth, um das Token zu erhalten. Die Dokumentation zur REST-API finden Sie hier.

api_key = CONFIG["apiKey"]
uri = f"https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key={api_key}"
data = {"email": EMAIL, "password": PASSWORD, "returnSecureToken": True}

result = requests.post(url=uri, data=data).json()

token = result['idToken']

Dieses Token wird zur Laufzeit ausgegeben und später verwendet.

Überprüfen Sie Token mit FastAPI

Installieren Sie, was Sie brauchen.

$ pip install fastapi firebase_admin uvicorn

Gehen Sie in der Firebase-Konsole zu Ausrüstung → Dienstkonto → Neuen privaten Schlüssel generieren, um den privaten Schlüssel herunterzuladen und zu laden.

from firebase_admin import auth, credentials

cred = credentials.Certificate("path/to/cert.json")
firebase_admin.initialize_app(cred)

Definiert eine Funktion, die ein Token aus dem Header abruft, es decodiert und Benutzerinformationen abruft. Eigentlich denke ich, dass Sie die Benutzerinformationen von der DB hier erhalten können. Die FastAPI-Dokumentation enthielt ein Beispiel für die Verwendung von "fastapi.security.OAuth2PasswordBearer", beschrieb jedoch nicht, wie man einfach ein Bearer-Token erhält. Ich musste mir den Code ansehen.

from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from fastapi import Depends, HTTPException, status

def get_current_user(cred: HTTPAuthorizationCredentials = Depends(HTTPBearer())):
    try:
        decoded_token = auth.verify_id_token(cred.credentials)
    except:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail='Invalid authentication credentials',
            headers={'WWW-Authenticate': 'Bearer'},
        )

    user = decoded_token['firebase']['identities']

    return user

Definiert einen Endpunkt, auf den nur mit einem gültigen Bearer-Token zugegriffen werden kann. FastAPI ist sehr nützlich, da Sie Depends einfügen und Anmerkungen eingeben können.

from fastapi import FastAPI, Depends, HTTPException, status

app = FastAPI()

@app.get('/')
async def homepage(current_user=Depends(get_current_user)):
    return {'msg': 'ok', 'user': current_user}

if __name__ == '__main__':
    import uvicorn

    uvicorn.run(app, host='localhost', port=5000)

Lauf

Der bisherige Code ist in Gist zusammengefasst. Verwenden Sie zunächst den folgenden Code, um das Token abzurufen und zu kopieren. https://gist.github.com/pteroid/241687ecb5219ae0ce633a884d8ab5bb

Starten Sie dann den Server mit dem folgenden Code. https://gist.github.com/pteroid/a698fd679fb545cb2cfe792f0114938c

Schlagen Sie es mit einem geeigneten REST-Client (ich benutze Insomnia). Dann erhalten Sie das folgende Ergebnis.

request


> GET / HTTP/1.1
> Host: localhost:5000
> User-Agent: insomnia/7.1.1
> Authorization: Bearer 
YOURTOKENYOURTOKENYOURTOKENYOURTOKENYOURTOKENYOURTOKENYOURTOKENYOURTOKENYOURTOKENYOURTOKENYOURTOKEN
> Accept: */*

response


{
  "msg": "ok",
  "user": {
    "identities": {
      "email": [
        "[email protected]"
      ]
    },
    "sign_in_provider": "password"
  }
}

Schließlich

FastAPI Ich möchte, dass Sie beliebter werden.

Recommended Posts

Ausgabe von Firebase-Authentifizierungstoken in Python und Token-Validierung mit Fast API
Authentifizierungsprozess mit gRPC- und Firebase-Authentifizierung
Passwortlose Authentifizierung mit RDS und IAM (Python)
Umgang mit "Jahren und Monaten" in Python
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API
Senden Sie HTTP mit dem Standardauthentifizierungsheader in Python
Klicken Sie in Python auf die Firebase Dynamic Links API
Versuchen Sie, die ChatWork-API und die Qiita-API in Python zu verwenden
Automatisieren Sie das Entfernen des Hintergrunds für die neuesten Porträts in einem Verzeichnis mit Python und API
Spielen mit der benutzerlokalen API für künstliche Intelligenz in Python
Evernote-API in Python
[Fast API + Firebase] Aufbau eines API-Servers für die Bearer-Authentifizierung
Berechnen Sie Pose- und Transformationsunterschiede in Python mit ROS
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Starten Sie die numerische Berechnung mit Python (mit Homebrew und Pip).
C-API in Python 3
[Python] Mit der API von Qiita erhalten Sie Benutzer- und Artikelinformationen
Einfache Verwendung der Nifty Cloud API mit Botocore und Python
Veriloggen und Cocotb werden nur zum Entwerfen und Testen von Verilog in Python verwendet.
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
Grundlegende Authentifizierung mit verschlüsseltem Passwort (.htpasswd) mit Flasche in Python
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
[LINE Messaging API] Geben Sie das Kanalzugriffstoken v2.1 in Python aus
Erstellen Sie eine Authentifizierungsfunktion mit django-allauth und CustomUser in Django
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
Einführung in die Effektüberprüfung Schreiben der Kapitel 4 und 5 in Python
Spielen Sie mit Mastodons Archiv in Python 2 Count Antworten und Favoriten
Generierung von Spezifikationen und Code in der REST-API-Entwicklung (Python Edition)
Installieren Sie CaboCha in der Ubuntu-Umgebung und rufen Sie es mit Python auf.
Stellen Sie die umgekehrte Geokodierung auf Japanisch mit der Python Google Maps-API bereit
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Hit Mastodons API in Python
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Verwenden Sie die Trello-API mit Python
Schaben mit Selen in Python
Python und Hardware-Verwenden von RS232C mit Python-
Betreiben Sie LibreOffice mit Python
Schaben mit Chromedriver in Python
BASIC-Authentifizierung mit Python-Flasche
Verwenden Sie die Twitter-API mit Python
Debuggen mit pdb in Python
Umgang mit Sounds in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Web-API mit Python + Falcon
Tweet mit Bild in Python
Kombiniert mit Ordnungszahl in Python
Stapel und Warteschlange in Python
Implementieren Sie schnelles RPC in Python
Blender Python API in Houdini (Python 3)
Rufen Sie die API mit python3 auf.
Python mit Pyenv und Venv
Unittest und CI in Python
Verwenden Sie die Unterschall-API mit Python3
Funktioniert mit Python und R.
Führen Sie Jupyter mit der REST-API aus, um Python-Code zu extrahieren und zu speichern
Automatische Bildinterpolation mit OpenCV und Python (Fast Marching Method, Navier-Stokes)
Beispiel zur Verwendung nach OAuth-Authentifizierung der BOX-API mit Python