Tôi đang cố tạo phương thức xác thực mã thông báo trả về true nếu mã thông báo JWT hợp lệ dựa trên chữ ký. Tôi không nghĩ rằng tôi thực sự cần phải xác nhận tất cả mọi thứ trong mã thông báo nhưng những gì thực sự có nghĩa là một mã thông báo là hợp lệ sau khi gọi ValidateToken()? Sự tồn tại của một nguyên tắc? Mã thông báo tham chiếu ngoài chứa các giá trị nhất định? Không chắc chắn khi nào trả về đúng từ phương thức này.Khi nào JWTSecurityTokenHandler.ValidateToken() thực sự hợp lệ?
public bool ValidateToken(string tokenString)
{
var validationParameters = new TokenValidationParameters()
{
ValidIssuer = "My Company",
ValidAudience = ApplicationId,
IssuerSigningKey = JsonWebTokenSecretKey
};
SecurityToken token = new JwtSecurityToken();
var tokenHandler = new JwtSecurityTokenHandler();
var principal = tokenHandler.ValidateToken(tokenString, validationParameters, out token);
return principal != null;
}
Chào mừng bạn đến với Stack Overflow, Eddie. Xin lưu ý rằng phần câu trả lời chỉ dành cho câu trả lời hoàn chỉnh cho câu hỏi gốc, chứ không phải bình luận. – Celeo
Lời xin lỗi của tôi, tôi nghĩ rằng tôi đã trả lời câu hỏi bằng cách cho thấy rằng bạn đặt thuộc tính xác thực thành true và sau đó bắt ngoại lệ được ném. Có quá nhiều bình luận trong lời giải thích của tôi không? –
Nhìn vào mã nguồn, điều này thực sự có vẻ là trường hợp: ValidateToken sẽ ném vào mã thông báo không hợp lệ. https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/master/src/System.IdentityModel.Tokens.Jwt/JwtSecurityTokenHandler.cs Đây là thiết kế tồi; chúng ta không nên sử dụng các ngoại lệ cho luồng điều khiển. Nhưng, đó là trạng thái của thư viện này ngày nay. –