首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jose-jwt和jwt.io生成的JWT令牌

使用jose-jwt和jwt.io生成的JWT令牌
EN

Stack Overflow用户
提问于 2016-11-16 22:49:42
回答 1查看 6.3K关注 0票数 3

我试图在.NET中生成JWT令牌,一开始我尝试使用"System.IdentityModel.Tokens.Jwt“,但是它在令牌验证过程中引起了问题,所以我切换到了”jose“。即使我可以用这段代码创建和验证令牌:

代码语言:javascript
复制
private byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

public string Login(LoginInformation credential)
{
    var payload = new Dictionary<string, object>()
    {
        { "sub", "mr.x@contoso.com" },
        { "exp", 1300819380 }
    };

    var secretKey = GetBytes("myawesomekey");

    string token = JWT.Encode(payload, secretKey, JwsAlgorithm.HS256);

    string json = JWT.Decode(token, secretKey);

    return json;

}

当我尝试用站点"https://jwt.io/“测试生成的令牌时,我遇到了一个问题。实际上,我复制/粘贴生成的令牌,输入"myawesomekey“作为密钥,但它一直告诉我”无效签名“。

我可以忽略这一点(因为在我的C#代码中的解码工作),但我很好奇,我想知道如何通过网站解码失败。我唯一的想法是,在C#代码中,我必须将键作为字节数组传递,所以可能仅仅将"myawesomekey“传递给站点是无效的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-16 23:02:15

您不正确地获取键的字节:

代码语言:javascript
复制
var payload = new Dictionary<string, object>()
{
    { "sub", "mr.x@contoso.com" },
    { "exp", 1300819380 }
};

var secretKey = Encoding.UTF8.GetBytes("myawesomekey");

string token = JWT.Encode(payload, secretKey, JwsAlgorithm.HS256);
return token;

效果很好。这也可能是System.IdentityModel.Tokens.Jwt出现问题的原因。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40643752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档