2016-07-28 124 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编码的,但任何获得您的令牌的人都可以阅读其中的所有内容。因此,如果用户甚至可以看到它们,那么请确保不要对它们进行任何敏感的操作。