Ich habe die JWT- Bibliothek zum Dekodieren eines Json-Web-Tokens verwendet und möchte zur offiziellen JWT-Implementierung von Microsoft, System.IdentityModel.Tokens.Jwt , wechseln .
Die Dokumentation ist sehr spärlich, daher fällt es mir schwer, herauszufinden, wie ich das erreichen kann, was ich mit der JWT-Bibliothek gemacht habe. Mit der JWT-Bibliothek gibt es eine Decode-Methode, die das base64-codierte JWT in JSON umwandelt, das dann deserialisiert werden kann. Ich würde gerne etwas Ähnliches mit System.IdentityModel.Tokens.Jwt machen, kann aber nach einigem Graben nicht herausfinden, wie.
Für das, was es wert ist, lese ich das JWT-Token aus einem Cookie zur Verwendung mit dem Identitätsframework von Google.
Jede Hilfe wäre dankbar.
Antworten:
Innerhalb des Pakets gibt es eine Klasse namens,
JwtSecurityTokenHandler
die von abgeleitet istSystem.IdentityModel.Tokens.SecurityTokenHandler
. In WIF ist dies die Kernklasse für das Deserialisieren und Serialisieren von Sicherheitstoken.Die Klasse verfügt über eine
ReadToken(String)
Methode, die Ihre Base64-codierte JWT-Zeichenfolge verwendet und eine zurückgibt,SecurityToken
die die JWT darstellt.Das
SecurityTokenHandler
hat auch eineValidateToken(SecurityToken)
Methode, die Ihre nimmtSecurityToken
und eine erstelltReadOnlyCollection<ClaimsIdentity>
. Normalerweise enthält dies für JWT ein einzelnesClaimsIdentity
Objekt mit einer Reihe von Ansprüchen, die die Eigenschaften des ursprünglichen JWT darstellen.JwtSecurityTokenHandler
definiert einige zusätzliche ÜberlastungenValidateToken
, insbesondere für eineClaimsPrincipal ValidateToken(JwtSecurityToken, TokenValidationParameters)
Überlastung. Mit diesemTokenValidationParameters
Argument können Sie das Token-Signatur-Zertifikat (als Liste vonX509SecurityTokens
) angeben . Es hat auch eine Überlastung, die die JWTstring
eher als eine als eine nimmtSecurityToken
.Der Code dafür ist ziemlich kompliziert, befindet sich jedoch im Global.asax.cx-Code (
TokenValidationHandler
Klasse) im Entwicklerbeispiel "ADAL - Native App für REST-Dienst - Authentifizierung mit ACS über den Browser-Dialog" unterhttp://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc
Alternativ verfügt die
JwtSecurityToken
Klasse über zusätzliche Methoden, die sich nicht in der Basisklasse befindenSecurityToken
, z. B. eineClaims
Eigenschaft, die die enthaltenen Ansprüche abruft, ohne dieClaimsIdentity
Auflistung zu durchlaufen. Es hat auch einePayload
Eigenschaft, die einJwtPayload
Objekt zurückgibt , mit dem Sie den unformatierten JSON des Tokens abrufen können. Es hängt von Ihrem Szenario ab, welcher Ansatz am besten geeignet ist.Die allgemeine (dh nicht JWT-spezifische) Dokumentation für die
SecurityTokenHandler
Klasse finden Sie unterhttp://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.securitytokenhandler.aspx
Abhängig von Ihrer Anwendung können Sie den JWT-Handler genau wie jeden anderen Handler in der WIF-Pipeline konfigurieren.
Es gibt 3 Beispiele davon, die in verschiedenen Anwendungsarten bei verwendet werden
http://code.msdn.microsoft.com/site/search?f%5B0%5D.Type=SearchText&f%5B0%5D.Value=aal&f%5B1%5D.Type=User&f%5B1%5D.Value=Azure%% 20AD% 20Developer% 20Experience% 20Team & f% 5B1% 5D.Text = Azure% 20AD% 20Developer% 20Experience% 20Team
Wahrscheinlich wird einer Ihren Bedürfnissen entsprechen oder zumindest an diese angepasst werden können.
quelle
Ich frage mich nur, warum ich überhaupt einige Bibliotheken für die Dekodierung und Verifizierung von JWT-Token verwenden soll.
Das codierte JWT-Token kann mit dem folgenden Pseudocode erstellt werden
Es ist sehr einfach, auf eine bestimmte Bibliothek zu verzichten. Verwenden Sie folgenden Code:
Die Token-Dekodierung ist eine umgekehrte Version des obigen Codes. Um die Signatur zu überprüfen, benötigen Sie dieselbe und vergleichen den Signaturteil mit der berechneten Signatur.
UPDATE: Für diejenigen, die Schwierigkeiten haben, Base64-URL-sichere Codierung / Decodierung durchzuführen, lesen Sie bitte eine andere SO-Frage sowie Wiki und RFCs
quelle