我正在使用jose jwt库来创建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;
答案 0 :(得分: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编码的,但任何掌握你的令牌的人都可以读取其中的所有内容。因此,如果用户可以看到它们的可能性很小,请确保不要对其敏感。