2015-06-30 8 views
5

Nasz starszy programista napisał poniższy kod, jako przykład:analizowaniem JWT dostać roszczeń w 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; 
    } 
} 

(. Jest też klasa „Token.cs”, który właśnie ma właściwość nazwę jako ciąg)

Nasz decoded JWT ładowność wygląda następująco:

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

problem napotkasz jest to, że gdy próbuję dostać roszczenia typu „sub”, nic nie wyjdzie (i to nie jest na liście). ALE "sub" wydaje się być extremely common claim.

Co ja tu robię źle? Czy otrzymam roszczenie podmiotu ("sub")?

Edit: Dla tych zalecające system.IdentityModel - otrzymuję ten błąd, gdy próbuje go używać:

identityModelError

+0

Możliwy duplikat [dekodowania i weryfikacji za pomocą tokenu JWT System.IdentityModel.Tokens.Jwt] (https://stackoverflow.com/ pytania/18677 837/dekodowanie-weryfikacja-jwt-token-using-system-identitymodel-tokens-jwt) –

Odpowiedz

11

Jeśli masz token w formacie JWT można użyć System.IdentityModel.Tokens. Jwt.dll, v2.0.0.0 i zdobyć przedmiot, jak pokazano poniżej

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

Dziękuję, ta odpowiedź jest tutaj: http://stackoverflow.com/questions/18677837/decoding-and-verifying-jwt -token-using-system-identitymodel-tokens-jwt Ale powiedziano mi, żebym go nie używał i NIE MOŻE go używać z powodu błędu, który wprowadzę do pierwotnego pytania. – VSO

+1

Błąd mówi dokładnie, co musisz zrobić, aby to naprawić, a mianowicie dodać odwołanie do określonych zestawów. Zespoły te są zawarte w platformach .NET 4.5 i 4.6 i powinieneś być w stanie dodać odniesienie do nich w taki sam sposób, jak dodać odniesienie do zespołu, na przykład System.Collections.dll –