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

时间:2015-06-30 23:29:42

标签: c# owin jwt

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

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"类只有一个name属性作为字符串。)

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

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

我遇到的问题是,当我尝试通过Type" sub"声明时,没有任何内容出现(并且它不在列表中)。但是" sub"似乎是extremely common claim

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

编辑:对于那些推荐system.IdentityModel的人 - 尝试使用它时出现此错误:

identityModelError

1 个答案:

答案 0 :(得分:25)

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

(\x -> (3 + x) + (100 * x)) $ 5