2015-06-30 15 views
5

phát triển cao cấp của chúng tôi đã viết đoạn code sau, như một ví dụ:Parsing JWT để có được tuyên bố trong 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; 
    } 
} 

(. Ngoài ra còn có một "Token.cs" class mà chỉ có một tài sản tên như string)

decoded JWT tải trọng của chúng tôi trông như thế này:

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

vấn đề tôi gặp phải là khi tôi cố gắng để có được khiếu nại của Loại "phụ", không có gì đi lên (và nó không có trong danh sách). NHƯNG "phụ" có vẻ là extremely common claim.

Tôi đang làm gì sai ở đây? Tôi có nhận được yêu cầu ("phụ") của chủ đề không?

Edit: Đối với những đề xuất system.IdentityModel - Tôi nhận được lỗi này khi cố gắng sử dụng nó:

identityModelError

+0

trùng lặp có thể xảy ra của [giải mã và xác minh JWT thẻ sử dụng System.IdentityModel.Tokens.Jwt] (https://stackoverflow.com/ câu hỏi/18677 837/decoding-and-verify-jwt-token-using-system-identitymodel-tokens-jwt) –

Trả lời

11

Nếu bạn có dấu hiệu ở định dạng JWT bạn có thể sử dụng System.IdentityModel.Tokens. Jwt.dll, v2.0.0.0 và nhận đề tài này như hình dưới đây

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

Cảm ơn bạn, câu trả lời đó là ở đây: http://stackoverflow.com/questions/18677837/decoding-and-verifying-jwt -token-using-system-identitymodel-tokens-jwt Nhưng tôi được yêu cầu không sử dụng và KHÔNG ĐƯỢC sử dụng nó vì lỗi mà tôi sẽ đưa vào câu hỏi gốc. – VSO

+1

Lỗi này cho bạn biết chính xác những gì bạn cần làm để sửa chữa nó, cụ thể là, thêm một tham chiếu đến các assembly được chỉ định. Các assembly này được bao gồm trong các khung công tác .NET 4.5 và 4.6 và bạn có thể thêm một tham chiếu tới chúng theo cùng cách mà bạn sẽ thêm một tham chiếu đến một assembly như System.Collections.dll –