2016-07-28 14 views
0

Ich benutze jose jwt-Bibliothek zum Erstellen von JWT-Token, ich bin mir nicht sicher, wie kann ich das Claims-Tag in der Nutzlast verwenden. Ich möchte den Benutzernamen und einige andere damit verbundene Daten speichern. unten ist der Code, der i-Code zu generieren bin mitwie Ansprüche in JWT mit jose-jwt hinzufügen

 byte[] secretKey = Base64UrlDecode("-----BEGIN PRIVATE KEY-----"); 
     DateTime issued = DateTime.Now; 
     DateTime expire = DateTime.Now.AddHours(10); 

     var payload = new Dictionary<string, object>() 
     { 
      {"iss", "service email"}, 
      {"aud", "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"}, 
      {"sub", "service email"}, 
      {"iat", ToUnixTime(issued).ToString()}, 
      {"exp", ToUnixTime(expire).ToString()} 
     }; 

     string token = JWT.Encode(payload, secretKey, JwsAlgorithm.HS256); 

     return token; 

Antwort

2

Die JWT Spezifikation spricht über drei Arten von Forderungen: Registered, Public and Private.

Registrierte

The usual ones wie iss, sub, exp, etc

Öffentliche Ansprüche

Die IANA JWT Claims Registry wird verwendet, um die Ansprüche anzugeben, die öffentlich verwendet werden sollten, um sie zwischen Diensten zu standardisieren. Diese enthält viele nützliche diejenigen wie name, email, address usw.

Privat Ansprüche

Wenn Sie nur Ihr Token innerhalb Ihrer eigenen Anwendung oder zwischen bekannten Anwendungen verwendet man eigentlich hinzufügen könnte was auch immer behauptet, Sie wollen.

Es könnte eine gute Idee sein, die Ansprüche aus dem IANA JWT Claims Registry für andere Zwecke zu verwenden (dh verwenden Sie nicht name, um den Benutzernamen des Benutzers zu speichern).

So Ihr Code in Ihrem Fall könnte einfach so sein, den Benutzernamen hinzufügen (mit der Forderung aus der IANA Registry)

byte[] secretKey = Base64UrlDecode("-----BEGIN PRIVATE KEY-----"); 
DateTime issued = DateTime.Now; 
DateTime expire = DateTime.Now.AddHours(10); 

var payload = new Dictionary<string, object>() 
{ 
    {"iss", "service email"}, 
    {"aud", "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"}, 
    {"sub", "service email"}, 
    {"iat", ToUnixTime(issued).ToString()}, 
    {"exp", ToUnixTime(expire).ToString()}, 
    {"preferred_username", "MyAwesomeUsername"}   
}; 

string token = JWT.Encode(payload, secretKey, JwsAlgorithm.HS256); 

return token; 

Obwohl, wenn es nur für den internen Gebrauch ist würde ich wahrscheinlich gehen mit nur username oder usr ich selbst.

Eine andere Sache zu erinnern (und dass viele falsch verstehen) ist, dass JWT nichts verschlüsselt. Der Inhalt ist base64-kodiert, aber jeder, der Ihr Token ergreift, kann alles darin lesen. Stellen Sie also sicher, dass Sie nichts Empfindliches in sich tragen, wenn die Wahrscheinlichkeit gering ist, dass ein Benutzer sie sehen kann.

Verwandte Themen