当前位置: 首页 > 知识库问答 >
问题:

如何解码JWT令牌?

沈博涉
2023-03-14

我不明白这个图书馆是如何工作的。你能帮帮我吗?

以下是我的简单代码:

public void TestJwtSecurityTokenHandler()
    {
        var stream =
            "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJJU1MiLCJzY29wZSI6Imh0dHBzOi8vbGFyaW0uZG5zY2UuZG91YW5lL2NpZWxzZXJ2aWNlL3dzIiwiYXVkIjoiaHR0cHM6Ly9kb3VhbmUuZmluYW5jZXMuZ291di5mci9vYXV0aDIvdjEiLCJpYXQiOiJcL0RhdGUoMTQ2ODM2MjU5Mzc4NClcLyJ9";
        var handler = new JwtSecurityTokenHandler();

        var jsonToken = handler.ReadToken(stream);
    }

这是错误:

字符串需要采用紧凑的JSON格式,格式为:Base64UrlEncodedHeader。Base64UrlEndcodedPayload。可选,Base64UrlEncodedSignature'。

如果你复制流在jwt.io网站,它的作品罚款:)

共有3个答案

商德泽
2023-03-14

您需要用于生成加密令牌的秘密字符串。此代码适用于我:

protected string GetName(string token)
    {
        string secret = "this is a string used for encrypt and decrypt token"; 
        var key = Encoding.ASCII.GetBytes(secret);
        var handler = new JwtSecurityTokenHandler();
        var validations = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(key),
            ValidateIssuer = false,
            ValidateAudience = false
        };
        var claims = handler.ValidateToken(token, validations, out var tokenSecure);
        return claims.Identity.Name;
    }
方博学
2023-03-14

new JwtSecurityTokenHandler()。ReadToken(“”)将返回一个SecurityToken

new JwtSecurityTokenHandler()。ReadJwtToken(“”)将返回一个JwtSecurityToken

如果你只是改变你正在使用的方法,你可以避免上述答案中的强制转换

朱睿
2023-03-14

我找到了解决方案,只是忘了计算结果:

var stream = "[encoded jwt]";  
var handler = new JwtSecurityTokenHandler();
var jsonToken = handler.ReadToken(stream);
var tokenS = jsonToken as JwtSecurityToken;

或者,没有演员阵容:

var token = "[encoded jwt]";  
var handler = new JwtSecurityTokenHandler();
var jwtSecurityToken = handler.ReadJwtToken(token);

我可以使用索赔:

var jti = tokenS.Claims.First(claim => claim.Type == "jti").Value;
 类似资料:
  • 我想解码我使用Postman收到的jwt令牌,并在RESTAPI中实现它。我该怎么做?我看到有人发布代码来解码jwt令牌(参考:如何在不使用库的情况下在javascript中解码jwt令牌?)但我不明白在《邮差》里怎么做?解码jwt需要什么url?需要什么标题、授权?

  • 我使用jsonwebtoken解码我的令牌,看看它是否已过期。但是,控制台.log返回 null。 我不明白,因为我的令牌不为空

  • 我添加了Firebase,允许客户端直接从web应用程序客户端(浏览器)进行身份验证。我正在使用firebase web JS包,它工作得非常好。我可以在浏览器中看到,我收到一个用户对象,其中包含有关该用户的信息,包括。 然后,我需要在我的服务器后端(即python django)上对该用户进行身份验证。在Firebase文档中,我找到了一个我正试图做的操作指南,即验证id令牌。 因为他们没有支持

  • 问题内容: 我目前正在使用Golang应用程序。我从客户端收到JWT令牌,在Go中,我需要对该令牌进行解码并获取以下信息:用户,名称等。我正在检查可用于处理JWT的库令牌,我来到https://github.com/dgrijalva/jwt- go ,但我看不到如何简单地制作所需的东西。 我有令牌,我需要将信息解码为地图或至少为json。在哪里可以找到如何做的指南?谢谢! 问题答案: 函数接受第

  • 我使用了一个JWT(Json Web令牌),它在负载中有一个刷新令牌(GUID)。通常,我使用Firebase JWT创建/编码和解码JWT。 我想在PHP中解码一个过期的JWT,然后使用其负载中的刷新令牌创建一个新的JWT(只要刷新令牌仍然有效)。如果我用Firebase解码JWT,它会抛出一个异常(过期),并且不会返回解码后的令牌。 如何安全地解码过期的JWT并访问它的有效负载?我可以只捕获过

  • 我正在尝试使用Web API 2提供的OAuth不记名令牌,但我不知道如何解加密它们或获取数据。 我真正想做的是找到或为自己编写一个等效的工具,用于我从Web API获得的令牌 https://developers.google.com/wallet/digital/docs/jwtdecoder 这个Google工具。Google工具允许您粘贴代表JWT令牌的文本字符串,并将其拆分并取消编码其中