gpt4 book ai didi

authentication - JWTSecurityTokenHandler.ValidateToken() 何时真正有效?

转载 作者:行者123 更新时间:2023-12-03 13:27:31 29 4
gpt4 key购买 nike

我正在尝试创建一个 token 验证方法,如果 JWT token 基于签名有效,则该方法返回 true。我不认为我真的需要验证 token 中的所有内容,但是在调用 ValidateToken() 之后实际上表示 token 有效的是什么?一个原则的存在? out 引用的 token 包含某些值?不确定何时从此方法返回 true。

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 中并从捕获了。

不过,这只是我验证 token 的“第一次通过”。之后,我做了一些繁重的工作来手动检查某些值。例如,我确保声明部分中的 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 为空。

关于authentication - JWTSecurityTokenHandler.ValidateToken() 何时真正有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355384/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com