2016-07-12 3 views
19

이 라이브러리의 작동 방식을 이해할 수 없습니다. 제발 도와 주실 수 있나요?JWT 토큰을 디코딩하는 방법은 무엇입니까?

public void TestJwtSecurityTokenHandler() 
    { 
     var stream = 
      "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJJU1MiLCJzY29wZSI6Imh0dHBzOi8vbGFyaW0uZG5zY2UuZG91YW5lL2NpZWxzZXJ2aWNlL3dzIiwiYXVkIjoiaHR0cHM6Ly9kb3VhbmUuZmluYW5jZXMuZ291di5mci9vYXV0aDIvdjEiLCJpYXQiOiJcL0RhdGUoMTQ2ODM2MjU5Mzc4NClcLyJ9"; 
     var handler = new JwtSecurityTokenHandler(); 

     var jsonToken = handler.ReadToken(stream); 
    } 

이 오류입니다 : 여기

내 간단한 코드입니다

문자열의 형식은 컴팩트 한 JSON 형식에 있어야

: Base64UrlEncodedHeader.Base64UrlEndcodedPayload.OPTIONAL, Base64UrlEncodedSignature '. 당신이 jwt.io website에서 스트림을 복사하는 경우

, 그것은 당신의 도움을 사전에 잘 :

감사 작품!

var tokenS = handler.ReadToken(tokenJwtReponse.access_token) as JwtSecurityToken; 

나는이 같은 주장 얻을 수 있습니다 후 : 내가 해결책을 발견

+1

JWT를, IO 사이트를 디코딩하지만 서명이 없습니다 그래서 그것은 유효하지 않습니다. – Crowcoder

+0

가능한 [System.IdentityModel.Tokens.Jwt를 사용하여 JWT 토큰 디코딩 및 확인] (https://stackoverflow.com/questions/18677837/decoding-and-verifying-jwt-token-using-system-identitymodel-tokens- jwt) –

+0

@MichaelFreidgeim 맞아요. 중복 된 질문입니다 ...하지만 사용하는 버전 라이브러리 때문에 답변이 다릅니다. – Cooxkie

답변

32

은, 그냥 다음과 같이 결과를 캐스팅 놓친

var jti = tokenS.Claims.First(claim => claim.Type == "jti").Value; 
+0

나는 tokenS.Claims를 클레임 목록으로 먼저 캐스팅해야했습니다. "((목록 ) tokenS.Claims) .ForEach (a => Console.WriteLine (a.Type.ToString() +" "+ a.Value)); ' –

+0

등록 된 클레임의 경우 속성 값을 직접 가져올 수 있습니다 'JwtSecurityToken'의 해제. 예를 들어,'tokenS.Id'는 jti 값을 얻을 것입니다 – user875318

+0

다음과 같이 할 수도 있습니다 : handler.ReadJwtToken (tokenJwtReponse.access_token); –

관련 문제