Browse Source

Update tutorial/security/simple-oauth2.md

Forgot the `tutorial/` in the messages of the two previous `Update` commits, but it was already pushed. Sorry about that.
pull/14015/head
Nils Lindemann 2 weeks ago
parent
commit
aac2e8c04c
  1. 44
      docs/de/docs/tutorial/security/simple-oauth2.md

44
docs/de/docs/tutorial/security/simple-oauth2.md

@ -1,8 +1,8 @@
# Einfaches OAuth2 mit Password und Bearer # Einfaches OAuth2 mit Password und Bearer { #simple-oauth2-with-password-and-bearer }
Lassen Sie uns nun auf dem vorherigen Kapitel aufbauen und die fehlenden Teile hinzufügen, um einen vollständigen Sicherheits-Flow zu erhalten. Lassen Sie uns nun auf dem vorherigen Kapitel aufbauen und die fehlenden Teile hinzufügen, um einen vollständigen Sicherheits-Flow zu erhalten.
## `username` und `password` entgegennehmen ## `username` und `password` entgegennehmen { #get-the-username-and-password }
Wir werden **FastAPIs** Sicherheits-Werkzeuge verwenden, um den `username` und das `password` entgegenzunehmen. Wir werden **FastAPIs** Sicherheits-Werkzeuge verwenden, um den `username` und das `password` entgegenzunehmen.
@ -18,7 +18,7 @@ Aber für die Login-*Pfadoperation* müssen wir diese Namen verwenden, um mit de
Die Spezifikation besagt auch, dass `username` und `password` als Formulardaten gesendet werden müssen (hier also kein JSON). Die Spezifikation besagt auch, dass `username` und `password` als Formulardaten gesendet werden müssen (hier also kein JSON).
### <abbr title="Geltungsbereich">`scope`</abbr> ### <abbr title="Geltungsbereich">`scope`</abbr> { #scope }
Ferner sagt die Spezifikation, dass der Client ein weiteres Formularfeld "`scope`" („Geltungsbereich“) senden kann. Ferner sagt die Spezifikation, dass der Client ein weiteres Formularfeld "`scope`" („Geltungsbereich“) senden kann.
@ -32,7 +32,7 @@ Diese werden normalerweise verwendet, um bestimmte Sicherheitsberechtigungen zu
* `instagram_basic` wird von Facebook / Instagram verwendet. * `instagram_basic` wird von Facebook / Instagram verwendet.
* `https://www.googleapis.com/auth/drive` wird von Google verwendet. * `https://www.googleapis.com/auth/drive` wird von Google verwendet.
/// info /// info | Info
In OAuth2 ist ein „Scope“ nur ein String, der eine bestimmte erforderliche Berechtigung deklariert. In OAuth2 ist ein „Scope“ nur ein String, der eine bestimmte erforderliche Berechtigung deklariert.
@ -44,11 +44,11 @@ Für OAuth2 sind es einfach nur Strings.
/// ///
## Code, um `username` und `password` entgegenzunehmen. ## Code, um `username` und `password` entgegenzunehmen. { #code-to-get-the-username-and-password }
Lassen Sie uns nun die von **FastAPI** bereitgestellten Werkzeuge verwenden, um das zu erledigen. Lassen Sie uns nun die von **FastAPI** bereitgestellten Werkzeuge verwenden, um das zu erledigen.
### `OAuth2PasswordRequestForm` ### `OAuth2PasswordRequestForm` { #oauth2passwordrequestform }
Importieren Sie zunächst `OAuth2PasswordRequestForm` und verwenden Sie es als Abhängigkeit mit `Depends` in der *Pfadoperation* für `/token`: Importieren Sie zunächst `OAuth2PasswordRequestForm` und verwenden Sie es als Abhängigkeit mit `Depends` in der *Pfadoperation* für `/token`:
@ -72,7 +72,7 @@ Wenn Sie es erzwingen müssen, verwenden Sie `OAuth2PasswordRequestFormStrict` a
* Eine optionale `client_id` (benötigen wir für unser Beispiel nicht). * Eine optionale `client_id` (benötigen wir für unser Beispiel nicht).
* Ein optionales `client_secret` (benötigen wir für unser Beispiel nicht). * Ein optionales `client_secret` (benötigen wir für unser Beispiel nicht).
/// info /// info | Info
`OAuth2PasswordRequestForm` ist keine spezielle Klasse für **FastAPI**, so wie `OAuth2PasswordBearer`. `OAuth2PasswordRequestForm` ist keine spezielle Klasse für **FastAPI**, so wie `OAuth2PasswordBearer`.
@ -84,7 +84,7 @@ Da es sich jedoch um einen häufigen Anwendungsfall handelt, wird er zur Vereinf
/// ///
### Die Formulardaten verwenden ### Die Formulardaten verwenden { #use-the-form-data }
/// tip | Tipp /// tip | Tipp
@ -102,7 +102,7 @@ Für den Fehler verwenden wir die Exception `HTTPException`:
{* ../../docs_src/security/tutorial003_an_py310.py hl[3,79:81] *} {* ../../docs_src/security/tutorial003_an_py310.py hl[3,79:81] *}
### Das Passwort überprüfen ### Das Passwort überprüfen { #check-the-password }
Zu diesem Zeitpunkt liegen uns die Benutzerdaten aus unserer Datenbank vor, das Passwort haben wir jedoch noch nicht überprüft. Zu diesem Zeitpunkt liegen uns die Benutzerdaten aus unserer Datenbank vor, das Passwort haben wir jedoch noch nicht überprüft.
@ -112,7 +112,7 @@ Sie sollten niemals Klartext-Passwörter speichern, daher verwenden wir ein (gef
Wenn die Passwörter nicht übereinstimmen, geben wir denselben Fehler zurück. Wenn die Passwörter nicht übereinstimmen, geben wir denselben Fehler zurück.
#### Passwort-Hashing #### Passwort-Hashing { #password-hashing }
„Hashing“ bedeutet: Konvertieren eines Inhalts (in diesem Fall eines Passworts) in eine Folge von Bytes (ein schlichter String), die wie Kauderwelsch aussieht. „Hashing“ bedeutet: Konvertieren eines Inhalts (in diesem Fall eines Passworts) in eine Folge von Bytes (ein schlichter String), die wie Kauderwelsch aussieht.
@ -120,7 +120,7 @@ Immer wenn Sie genau den gleichen Inhalt (genau das gleiche Passwort) übergeben
Sie können jedoch nicht vom Kauderwelsch zurück zum Passwort konvertieren. Sie können jedoch nicht vom Kauderwelsch zurück zum Passwort konvertieren.
##### Warum Passwort-Hashing verwenden? ##### Warum Passwort-Hashing verwenden? { #why-use-password-hashing }
Wenn Ihre Datenbank gestohlen wird, hat der Dieb nicht die Klartext-Passwörter Ihrer Benutzer, sondern nur die Hashes. Wenn Ihre Datenbank gestohlen wird, hat der Dieb nicht die Klartext-Passwörter Ihrer Benutzer, sondern nur die Hashes.
@ -128,7 +128,7 @@ Der Dieb kann also nicht versuchen, die gleichen Passwörter in einem anderen Sy
{* ../../docs_src/security/tutorial003_an_py310.py hl[82:85] *} {* ../../docs_src/security/tutorial003_an_py310.py hl[82:85] *}
#### Über `**user_dict` #### Über `**user_dict` { #about-user-dict }
`UserInDB(**user_dict)` bedeutet: `UserInDB(**user_dict)` bedeutet:
@ -144,13 +144,13 @@ UserInDB(
) )
``` ```
/// info /// info | Info
Eine ausführlichere Erklärung von `**user_dict` finden Sie in [der Dokumentation für **Extra Modelle**](../extra-models.md#uber-user_indict){.internal-link target=_blank}. Eine ausführlichere Erklärung von `**user_dict` finden Sie in [der Dokumentation für **Extra Modelle**](../extra-models.md#about-user-in-dict){.internal-link target=_blank}.
/// ///
## Den Token zurückgeben ## Den Token zurückgeben { #return-the-token }
Die Response des `token`-Endpunkts muss ein JSON-Objekt sein. Die Response des `token`-Endpunkts muss ein JSON-Objekt sein.
@ -182,7 +182,7 @@ Den Rest erledigt **FastAPI** für Sie.
/// ///
## Die Abhängigkeiten aktualisieren ## Die Abhängigkeiten aktualisieren { #update-the-dependencies }
Jetzt werden wir unsere Abhängigkeiten aktualisieren. Jetzt werden wir unsere Abhängigkeiten aktualisieren.
@ -196,7 +196,7 @@ In unserem Endpunkt erhalten wir also nur dann einen Benutzer, wenn der Benutzer
{* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *} {* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *}
/// info /// info | Info
Der zusätzliche Header `WWW-Authenticate` mit dem Wert `Bearer`, den wir hier zurückgeben, ist ebenfalls Teil der Spezifikation. Der zusätzliche Header `WWW-Authenticate` mit dem Wert `Bearer`, den wir hier zurückgeben, ist ebenfalls Teil der Spezifikation.
@ -214,11 +214,11 @@ Das ist der Vorteil von Standards ...
/// ///
## Es in Aktion sehen ## Es in Aktion sehen { #see-it-in-action }
Öffnen Sie die interaktive Dokumentation: <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>. Öffnen Sie die interaktive Dokumentation: <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
### Authentifizieren ### Authentifizieren { #authenticate }
Klicken Sie auf den Button „Authorize“. Klicken Sie auf den Button „Authorize“.
@ -234,7 +234,7 @@ Nach der Authentifizierung im System sehen Sie Folgendes:
<img src="/img/tutorial/security/image05.png"> <img src="/img/tutorial/security/image05.png">
### Die eigenen Benutzerdaten ansehen ### Die eigenen Benutzerdaten ansehen { #get-your-own-user-data }
Verwenden Sie nun die Operation `GET` mit dem Pfad `/users/me`. Verwenden Sie nun die Operation `GET` mit dem Pfad `/users/me`.
@ -260,7 +260,7 @@ Wenn Sie auf das Schlosssymbol klicken und sich abmelden und dann den gleichen V
} }
``` ```
### Inaktiver Benutzer ### Inaktiver Benutzer { #inactive-user }
Versuchen Sie es nun mit einem inaktiven Benutzer und authentisieren Sie sich mit: Versuchen Sie es nun mit einem inaktiven Benutzer und authentisieren Sie sich mit:
@ -278,7 +278,7 @@ Sie erhalten die Fehlermeldung „Inactive user“:
} }
``` ```
## Zusammenfassung ## Zusammenfassung { #recap }
Sie verfügen jetzt über die Tools, um ein vollständiges Sicherheitssystem basierend auf `username` und `password` für Ihre API zu implementieren. Sie verfügen jetzt über die Tools, um ein vollständiges Sicherheitssystem basierend auf `username` und `password` für Ihre API zu implementieren.

Loading…
Cancel
Save