解析 JWT 以获取 C# 中的声明

Parsing JWT to get claims in C#

我们的高级开发人员编写了以下代码,作为示例:

public class TokenParser 
{
    private Token token;

    public Token Parse(HttpRequestMessage r)
    {
        IOwinContext context = r.GetOwinContext();
        token = new Token();
        ParseData(context);
        return token;
    }

    private void ParseData(IOwinContext context)
    {
        token.Name= context.Authentication.User.Claims.Single(x => x.Type == ClaimTypes.Name).Value;
    }
}

(还有一个 "Token.cs" class 只是有一个名称 属性 作为字符串。)

我们的 decoded JWT 负载如下所示:

{
  "iss": "https://someissuer.com/",
  "sub": "I want this string, atm I get it manually",
  "aud": "11543fdsasf23432",
  "exp": 33244323433,
  "iat": 23443223434
}

我 运行 遇到的问题是,当我尝试通过类型 "sub" 获得声明时,什么也没有出现(而且它不在列表中)。但是 "sub" 似乎是 extremely common claim.

我在这里做错了什么?去吧我得到主题("sub")声明?

编辑:对于那些推荐 system.IdentityModel - 我在尝试使用它时遇到此错误:

如果您有 JWT 格式的令牌,您可以使用 System.IdentityModel.Tokens.Jwt.dll、v2.0.0.0 并获取如下所示的主题

var jwtToken = new JwtSecurityToken(token);
    jwtToken.Subject