спецификации переговоры 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, но любой, кто получает ваш токен, может читать все в нем. Поэтому не ставьте в них ничего чувствительного, если есть даже небольшой шанс, что пользователь сможет их увидеть.