【问题标题】:how to add claims in jwt using jose-jwt如何使用 jose-jwt 在 jwt 中添加声明
【发布时间】:2016-07-28 17:57:38
【问题描述】:

我正在使用 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; 

【问题讨论】:

    标签: c# json jwt


    【解决方案1】:

    JWT 规范讨论了三种类型的声明:Registered, Public and Private.

    已注册

    The usual onesisssubexp

    公开声明

    IANA JWT Claims Registry 用于指定应公开使用的声明,以便在服务之间对其进行标准化。其中包含很多有用的,例如nameemailaddress等。

    私人声明

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

    不过,最好避免将来自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;
    

    虽然如果它仅供内部使用,我可能会只使用usernameusr 我自己。

    要记住的另一件事(很多人会出错)是 JWT 没有加密任何东西。内容是 base64 编码的,但任何持有您的令牌的人都可以读取其中的所有内容。因此,如果用户有可能看到它们,请确保不要在其中放置任何敏感内容。

    【讨论】:

    • 如果我在payload中添加exp键,那么它会在那个特定时间之后过期吗?
    • 这取决于消费方是否验证 exp 密钥。但可能是的。
    猜你喜欢
    • 1970-01-01
    • 2020-09-04
    • 2015-05-08
    • 2019-02-26
    • 2018-10-17
    • 2016-02-27
    • 2018-07-05
    • 1970-01-01
    • 2020-03-31
    相关资源
    最近更新 更多