2016-07-28 67 views
0

我正在使用jose jwt庫來創建jwt令牌,我不知道如何在有效負載中使用聲明標記。我想存儲用戶名和其他一些與之相關的數據。下面是我使用生成代碼如何在jwt中使用jose-jwt添加聲明

 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; 

回答

2

約三種類型的權利要求的JWT規範會談的代碼:Registered, Public and Private.

註冊

The usual onesisssubexp

公開聲明

IANA JWT Claims Registry用於指定應公開使用以在服務之間對其進行標準化的聲明。這些包含大量有用的,例如nameemailaddress

私人權利

如果你只使用自己的應用程序中的或已知的應用程序,你可以真正添加任何聲稱你之間您的令牌想。

儘管避免將IANA JWT Claims Registry的聲明用於其他用途(即不要使用name來存儲用戶用戶名),但這可能是個好主意。

所以你的情況你的代碼可以簡單地這樣來添加用戶名(從IANA註冊表中的要求)

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; 

但如果這只是供內部使用,我可能會與剛username或去usr我自己。

另一件需要記住的事情(許多人錯誤)是智威湯遜不加密任何東西。內容是base64編碼的,但任何獲得您的令牌的人都可以閱讀其中的所有內容。因此,如果用戶甚至可以看到它們,那麼請確保不要對它們進行任何敏感的操作。