Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing JWT to get claims in C#

Tags:

c#

jwt

owin

Our senior developer wrote the following code, as an example:

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;
    }
}

(There is also a "Token.cs" class that just has a name property as string.)

Our decoded JWT payload looks like this:

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

The problem I run into is that when I try to get claim by Type "sub", nothing comes up (and it's not in the list). BUT "sub" seems to be an extremely common claim.

What am I doing wrong here? Go do I get the subject ("sub") claim?

Edit: For those recommending system.IdentityModel - I get this error when trying to use it:

identityModelError

like image 554
VSO Avatar asked Jun 30 '15 23:06

VSO


1 Answers

If you have the token in JWT format you can use System.IdentityModel.Tokens.Jwt.dll, v2.0.0.0 and get the subject as shown below

var jwtToken = new JwtSecurityToken(token);
    jwtToken.Subject
like image 199
vinayak bhadage Avatar answered Oct 17 '22 15:10

vinayak bhadage