如何使用josejwt在jwt中添加声明

本文关键字:添加 声明 jwt 何使用 josejwt | 更新日期: 2023-09-27 17:58:59

我正在使用josejwt库来创建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; 

如何使用josejwt在jwt中添加声明

JWT规范讨论了三种类型的声明:Registered、Public和Private。

已注册

常用的如isssubexp

公开声明

IANA JWT索赔登记处用于指定应公开使用的索赔,以在服务之间实现标准化。其中包含许多有用的,如nameemailaddress等。

私人索赔

如果您只在自己的应用程序中或在已知的应用程序之间使用令牌,您实际上可以添加任何您想要的声明。

不过,最好避免将IANA JWT索赔登记处的索赔用于其他目的(即不要使用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;

不过,如果它只是内部使用,我自己可能只会选择usernameusr

另一件需要记住的事情(很多人都错了)是JWT没有加密任何东西。内容是base64编码的,但任何掌握你的代币的人都可以读取其中的所有内容。因此,如果用户很有可能看到它们,请确保不要在其中放入任何敏感内容。