2016-07-12 17 views
19

Tôi không hiểu cách thư viện này hoạt động. Bạn có thể vui lòng giúp tôi không ?Làm thế nào để giải mã mã JWT?

Đây là mã đơn giản của tôi:

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

     var jsonToken = handler.ReadToken(stream); 
    } 

Đây là lỗi:

Chuỗi cần phải ở định dạng JSON nhỏ gọn, mà có dạng: Base64UrlEncodedHeader.Base64UrlEndcodedPayload.OPTIONAL, Base64UrlEncodedSignature '.

Nếu bạn sao chép dòng trong jwt.io website, nó hoạt động tốt :)

Cảm ơn trước sự giúp đỡ của bạn!

+1

JWT, trang web io giải mã nó, nhưng không có chữ ký vì vậy nó không hợp lệ. – Crowcoder

+0

Bản sao có thể có của [Giải mã và xác minh mã thông báo JWT bằng cách sử dụng System.IdentityModel.Tokens.Jwt] (https://stackoverflow.com/questions/18677837/decoding-and-verifying-jwt-token-using-system-identitymodel-tokens- jwt) –

+0

@MichaelFreidgeim bạn đúng đó là câu hỏi trùng lặp ... nhưng câu trả lời là khác nhau vì thư viện phiên bản bạn sử dụng – Cooxkie

Trả lời

32

tôi tìm thấy giải pháp, tôi chỉ bỏ lỡ bỏ kết quả như sau:

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

Sau khi tôi có thể nhận được Claims như:

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

Tôi đã phải sử dụng tokenS.Claims làm Danh sách xác nhận quyền sở hữu trước. '((Danh sách ) tokenS.Claims) .ForEach (a => Console.WriteLine (a.Type.ToString() +" "+ a.Value)); ' –

+0

Đối với Xác nhận quyền sở hữu đã đăng ký, bạn có thể nhận trực tiếp giá trị thuộc tính tắt của 'JwtSecurityToken'. Ví dụ, 'tokenS.Id' sẽ cho bạn giá trị jti – user875318

+0

Bạn cũng có thể làm: handler.ReadJwtToken (tokenJwtReponse.access_token); –

Các vấn đề liên quan