繁体   English   中英

如何使用jose-jwt在jwt中添加声明

[英]how to add claims in jwt using jose-jwt

我正在使用jose jwt库创建jwt令牌,我不确定如何在有效负载中使用Claims标签。 我想存储用户名和与其相关的其他数据。 下面是我用来生成代码的代码

        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; 

JWT规范讨论了三种类型的声明: 注册的,公开的和私有的。

注册

常见的诸如isssubexp等。

公开声明

IANA JWT索赔注册中心用于指定应公开使用的索赔,以使服务之间的索赔标准化。 这些包含许多有用的name ,例如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编码的,但是任何持有令牌的人都可以读取其中的所有内容。 因此,如果用户看到它们的机会很小,请确保不要在其中放入任何敏感物品。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM