2016-07-12 17 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をクレームのリストとして最初にキャストしなければなりませんでした。 "((List )tokenS.Claims).ForEach(a => Console.WriteLine(a.Type.ToString()+" "+ a.Value)); ' –

+0

登録クレームについては、プロパティ値を直接取得できます'JwtSecurityToken'のオフ。たとえば、 'tokenS.Id'はjtiの値を取得します – user875318

+0

あなたもできます:handler.ReadJwtToken(tokenJwtReponse.access_token); –

関連する問題