JWTSecurityTokenHandler.ValidateToken() 什么时候真正有效?
When is JWTSecurityTokenHandler.ValidateToken() actually valid?
我正在尝试创建一个令牌验证方法,如果 JWT 令牌基于签名有效,则该方法 return 为真。我不认为我真的需要验证令牌中的所有内容,但在调用 ValidateToken() 之后实际表示令牌有效的是什么?一个原则的存在? out 引用的令牌包含某些值?不确定何时从该方法 return 为真。
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;
}
我手动检查所有索赔值。我一直在为你的同一个问题寻找明确的答案,但我唯一看到的是,如果出现问题,ValidateToken 函数将抛出异常,所以我首先将调用包装在 try-catch 和 return false from the catch.
这只是我 "first-pass" 在验证令牌时的情况。之后我做了一些更繁重的工作来手动检查某些值。例如,我确保声明部分中的 unique_name 值作为我的数据库中的用户实际存在,该用户未被停用,以及其他类似的专有系统内容。
public static bool VerifyToken(string token)
{
var validationParameters = new TokenValidationParameters()
{
IssuerSigningToken = new BinarySecretSecurityToken(_key),
ValidAudience = _audience,
ValidIssuer = _issuer,
ValidateLifetime = true,
ValidateAudience = true,
ValidateIssuer = true,
ValidateIssuerSigningKey = true
};
var tokenHandler = new JwtSecurityTokenHandler();
SecurityToken validatedToken = null;
try
{
tokenHandler.ValidateToken(token, validationParameters, out validatedToken);
}
catch(SecurityTokenException)
{
return false;
}
catch(Exception e)
{
log(e.ToString()); //something else happened
throw;
}
//... manual validations return false if anything untoward is discovered
return validatedToken != null;
}
最后一行return validatedToken != null
纯属我的迷信。我从未见过 validatedToken 为空。
我正在尝试创建一个令牌验证方法,如果 JWT 令牌基于签名有效,则该方法 return 为真。我不认为我真的需要验证令牌中的所有内容,但在调用 ValidateToken() 之后实际表示令牌有效的是什么?一个原则的存在? out 引用的令牌包含某些值?不确定何时从该方法 return 为真。
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;
}
我手动检查所有索赔值。我一直在为你的同一个问题寻找明确的答案,但我唯一看到的是,如果出现问题,ValidateToken 函数将抛出异常,所以我首先将调用包装在 try-catch 和 return false from the catch.
这只是我 "first-pass" 在验证令牌时的情况。之后我做了一些更繁重的工作来手动检查某些值。例如,我确保声明部分中的 unique_name 值作为我的数据库中的用户实际存在,该用户未被停用,以及其他类似的专有系统内容。
public static bool VerifyToken(string token)
{
var validationParameters = new TokenValidationParameters()
{
IssuerSigningToken = new BinarySecretSecurityToken(_key),
ValidAudience = _audience,
ValidIssuer = _issuer,
ValidateLifetime = true,
ValidateAudience = true,
ValidateIssuer = true,
ValidateIssuerSigningKey = true
};
var tokenHandler = new JwtSecurityTokenHandler();
SecurityToken validatedToken = null;
try
{
tokenHandler.ValidateToken(token, validationParameters, out validatedToken);
}
catch(SecurityTokenException)
{
return false;
}
catch(Exception e)
{
log(e.ToString()); //something else happened
throw;
}
//... manual validations return false if anything untoward is discovered
return validatedToken != null;
}
最后一行return validatedToken != null
纯属我的迷信。我从未见过 validatedToken 为空。