Heim > Artikel > Backend-Entwicklung > Einführung in JWT-Prinzipien und einfache Anwendungen (mit Code)
Dieser Artikel bietet Ihnen eine Einführung in die JWT-Prinzipien und einfache Anwendungen (mit Code). Ich hoffe, dass er für Freunde hilfreich ist.
JWT-Authentifizierungs-Login
Kürzlich arbeite ich an einem Audit-System, bei dem die JWT-Login-Authentifizierung für die Hintergrundanmeldung verwendet wird.
Was ist JWT
Json Web Token (JWT) ist gemäß der Definition der offiziellen Website ein JSON-basierter offener Standard, der zur Übertragung von Ansprüchen zwischen Netzwerkanwendungsumgebungen implementiert ist. Der Token ist kompakt und sicher konzipiert und eignet sich besonders für verteilte Standorte. auf Szenario. JWT-Ansprüche werden im Allgemeinen verwendet, um authentifizierte Benutzeridentitätsinformationen zwischen Identitätsanbietern und Dienstanbietern zu übertragen, um Ressourcen vom Ressourcenserver zu erhalten. Es können auch einige zusätzliche Anspruchsinformationen hinzugefügt werden, die für andere Geschäftslogiken erforderlich sind zur Authentifizierung oder verschlüsselt.
Warum JWT verwenden
Dies wird hauptsächlich mit der herkömmlichen Sitzung verglichen. Bei der herkömmlichen Sitzung müssen einige Anmeldeinformationen auf der Serverseite gespeichert werden, normalerweise im Speicher, und der Back-End-Server ist ein Cluster usw. In einer verteilten Situation speichern andere Hosts diese Informationen nicht, daher müssen sie alle über einen festen Host überprüft werden. Wenn die Anzahl der Benutzer groß ist, kann es leicht zu einem Engpass am Authentifizierungspunkt kommen Die Anwendung ist schwer zu erweitern.
JWT-Prinzip
JWT besteht aus drei Teilen, die durch Punkte getrennt sind. Es sieht so aus, dass das JWT-Token selbst keine Leerzeichen, Zeilenumbrüche usw. enthält. Das Folgende wird aus ästhetischen Gründen verarbeitet.
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19. m0HD1SUd30TWKuDQImwjIl9a-oWJreG7tKVzuGVh7e4
Der Header-Teil ist ein JSON, der die Metadaten von JWT beschreibt, normalerweise wie folgt
{ "alg": "HS256", "typ": "JWT" }
alg gibt den für die Signatur verwendeten Algorithmus an, der Standardwert ist HMAC SHA256, geschrieben als HS256, tye stellt den Typ dieses Tokens dar, JWT-Token verwendet JWT einheitlich, das durch den obigen Header generierte Token ist
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
Offizielle Vorschriften 7 Felder, wie folgt erklärt
Zusätzlich zu den offiziellen, Wir können auch einige benutzerdefinierte Felder definieren, aber bedenken Sie, dass BASE64 umkehrbar ist, also geben Sie keine vertraulichen Informationen ein.
Das Folgende ist ein Beispiel;
{ "iss": "labs_purifier-api-panel", "iat": 1552975878, "exp": 1555567878, "aud": "http://ff-labs_purifier-api-test.fenda.io/prod/v1/auth/jwt", "sub": "1501385611884704", "scopes": [ "register", "open", "login", "panel" ] }
Die obige Nutzlast ist nach der BASE64-Verschlüsselung das generierte Token
eyJpc3MiOiJsYWJzX3B1cmlmaWVyLWFwaS1wYW5lbCIsImlhdCI6MTU1Mjk3NTg3OCwiZXhwIjoxNTU1NTY3ODc4LCJhdWQiOiJodHRwOi8vZmYtbGFic19wdXJpZmllci1hcGktdGVzdC5mZW5kYS5pby9wcm9kL3YxL2F1dGgvand0Iiwic3ViIjoiMTUwMTM4NTYxMTg4NDcwNCIsInNjb3BlcyI6WyJyZWdpc3RlciIsIm9wZW4iLCJsb2dpbiIsInBhbmVsIl19
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
Verwendung von JWT
Authorization: Bearer <token>
Einfache Generierung und Überprüfung von JWT in Python
Token generieren
def create_token(): payload={ "iss": "labs_purifier-api-panel", "iat": 1552975878, "exp": 1555567878, "aud": Config.AUDIENCE, "sub": "1501385611884704", "scopes": [ "register", "open", "login", "panel" ] } token = jwt.encode(payload, Config.SECRET_KEY, algorithm='HS256') return True, {'access_token': token}
Token überprüfen
def verify_jwt_token(token): try: payload = jwt.decode(token, Config.SECRET_KEY, audience=Config.AUDIENCE, algorithms=['HS256']) except (ExpiredSignatureError, DecodeError): return False, token if payload: return True, jwt_model
Es ist zu beachten, dass, wenn der aud-Parameter beim Generieren hinzugefügt wird, der Audience-Parameter auch bei der Überprüfung verwendet werden muss und die Werte gleich sein müssen
Dieser Artikel ist hier drüben. Weitere spannende Inhalte finden Sie in der Spalte
Python-Video-Tutorialauf der chinesischen PHP-Website!
Das obige ist der detaillierte Inhalt vonEinführung in JWT-Prinzipien und einfache Anwendungen (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!