0

OAuth2를 사용하여 Identity Server에서 JWT 토큰을 다시 가져올 수 있으며 토큰에서 클레임을 추출하려고합니다.ThinkTecture Identity Server JWT 토큰 디코드

https://developers.google.com/wallet/digital/docs/jwtdecoder과 같은 토큰 디코더를 사용하면 토큰 내부를 들여다 보면 잘 보입니다.

그러나 Microsoft JwtSecurityTokenHandler.ValidateToken을 사용하여 클레임 ID를 다시 얻으려면 C#에서 암호를 해독하는 것이 확실하지 않습니다.

신원 확인 서버에서 코드에 참조로 붙여 넣은 대칭 키를 사용하고 있습니다. JWT 토큰도 유효합니다.

정말 어떤 도움을 주셔서 감사합니다 :

string token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vaWRlbnRpdHlzZXJ2ZXIudjIudGhpbmt0ZWN0dXJlLmNvbS90cnVzdC9jaGFuZ2V0aGlzIiwiYXVkIjoidXJuOndlYmFwaXNlY3VyaXR5IiwibmJmIjoxMzk3MTEzMDY5LCJleHAiOjEzOTcxNDkwNjksIm5hbWVpZCI6InN0ZWZhbiIsInVuaXF1ZV9uYW1lIjoic3RlZmFuIiwiYXV0aG1ldGhvZCI6Ik9BdXRoMiIsImF1dGhfdGltZSI6IjIwMTQtMDQtMTBUMDY6NTc6NDguODEyWiIsImh0dHA6Ly9pZGVudGl0eXNlcnZlci50aGlua3RlY3R1cmUuY29tL2NsYWltcy9jbGllbnQiOiJyZWx5aW5nIHBhcnR5IDMgdGVzdCBjbGllbnQgbmFtZSIsImh0dHA6Ly9pZGVudGl0eXNlcnZlci50aGlua3RlY3R1cmUuY29tL2NsYWltcy9zY29wZSI6InVybjp3ZWJhcGlzZWN1cml0eSJ9.cFnmgHxrpy2rMg8B6AupVrJwltu7RhBAeIx_D3pxJeI"; 

string key = "ZHfUES/6wG28LY+SaMtvaeek34t2PBrAiBxur6MAI/w="; 

var validationParameters = new TokenValidationParameters() 
{ 
    AllowedAudience = "urn:webapisecurity", 
    SigningToken = new ???? 
    ValidIssuer = @"http://identityserver.v2.thinktecture.com/trust/changethis" 
}; 

var tokenHandler = new JwtSecurityTokenHandler(); 
var principal = tokenHandler.ValidateToken(token, validationParameters); 
나는 validationParameters.SigningToken 사용해야 SigningToken 어떤 종류의

?

답변

2

BinarySecretSecurityToken입니다. base64는 문자열 화 된 키를 디코딩하여 사용합니다.

+0

마우스 오른쪽 단추를 사용하여 JWT 토큰을 디코딩하는 코드입니다 수 있습니다 JWT 토큰 문자열을 디코드했지만 여전히 성공하지 못했습니다. 샘플 코드를 제공해 주시겠습니까? – Prateek

+0

JWT 토큰은 base64Url로 인코딩됩니다 (Base64의 URL 안전 버전). – leastprivilege

2

, 나는 사용자 Base64로 코드에 노력하고있어 당신은 토큰

http://jwt.io/

을 디코딩하는 웹 사이트를 다음 사용하고 여기에 C#을

class Program 
    { 
     static void Main(string[] args) 
     { 

      string token ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vaWRlbnRpdHlzZXJ2ZXIudjIudGhpbmt0ZWN0dXJlLmNvbS90cnVzdC9jaGFuZ2V0aGlzIiwiYXVkIjoidXJuOndlYmFwaXNlY3VyaXR5IiwibmJmIjoxMzk3MTEzMDY5LCJleHAiOjEzOTcxNDkwNjksIm5hbWVpZCI6InN0ZWZhbiIsInVuaXF1ZV9uYW1lIjoic3RlZmFuIiwiYXV0aG1ldGhvZCI6Ik9BdXRoMiIsImF1dGhfdGltZSI6IjIwMTQtMDQtMTBUMDY6NTc6NDguODEyWiIsImh0dHA6Ly9pZGVudGl0eXNlcnZlci50aGlua3RlY3R1cmUuY29tL2NsYWltcy9jbGllbnQiOiJyZWx5aW5nIHBhcnR5IDMgdGVzdCBjbGllbnQgbmFtZSIsImh0dHA6Ly9pZGVudGl0eXNlcnZlci50aGlua3RlY3R1cmUuY29tL2NsYWltcy9zY29wZSI6InVybjp3ZWJhcGlzZWN1cml0eSJ9.cFnmgHxrpy2rMg8B6AupVrJwltu7RhBAeIx_D3pxJeI"; 

       var parts = token.Split('.'); 
       string partToConvert = parts[1]; 
       var partAsBytes = Convert.FromBase64String(partToConvert); 
       var partAsUTF8String = Encoding.UTF8.GetString(partAsBytes, 0, partAsBytes.Count()); 

       //JSON.net required 
       var jwt = JObject.Parse(partAsUTF8String); 


       Console.Write(jwt.ToString()); 

      Console.ReadLine(); 

     } 
     }