【问题标题】:Parsing JWT to get claims in C#解析 JWT 以获取 C# 中的声明
【发布时间】:2015-09-17 22:55:45
【问题描述】:

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

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”类,它只有一个名称属性作为字符串。)

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

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

我遇到的问题是,当我尝试通过“sub”类型获取声明时,什么都没有出现(而且它不在列表中)。但是“子”似乎是extremely common claim

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

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

【问题讨论】:

标签: c# owin jwt


【解决方案1】:

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

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

【讨论】:

  • 谢谢,答案就在这里:stackoverflow.com/questions/18677837/… 但我被告知不要使用它并且不能使用它,因为我将在原始问题中提出错误。
  • 该错误准确地告诉您修复它需要做什么,即添加对指定程序集的引用。这些程序集包含在 .NET 4.5 和 4.6 框架中,您应该能够像添加对 System.Collections.dll 等程序集的引用一样添加对它们的引用
猜你喜欢
  • 2017-12-27
  • 1970-01-01
  • 2019-01-20
  • 2021-04-21
  • 2019-12-12
  • 2020-03-28
  • 1970-01-01
  • 2016-01-06
  • 2016-05-02
相关资源
最近更新 更多