2016-07-28 4 views
0

Я использую jose jwt library для создания 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 ones таких как iss, sub, exp, и т.д. .

Публичные претензии

IANA JWT Claims Registry Используется для указания претензий, которые должны публично использоваться для стандартизации их между службами. Они содержат много полезных из них, такие как name, email, address и т.д.

Частные требования

Если вы только с помощью токена в пределах вашего собственного приложения или между известными приложениями вы могли бы на самом деле добавить любые претензии вас хотеть.

Возможно, было бы неплохо избежать использования претензий от 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 себя.

Еще одна вещь, которую нужно помнить (и что многие ошибаются) заключается в том, что JWT не шифрует ничего. Содержимое кодируется base64, но любой, кто получает ваш токен, может читать все в нем. Поэтому не ставьте в них ничего чувствительного, если есть даже небольшой шанс, что пользователь сможет их увидеть.

Смежные вопросы