fix(auth): Token 黑名单改用 SHA-256 替代 SipHash
- access token 黑名单 hash 函数从 std::collections::DefaultHasher (SipHash) 改为 sha2::Sha256,与 refresh token 存储一致 - SipHash 是非密码学 hash,理论上可被构造碰撞绕过黑名单检查 - SHA-256 提供密码学安全保证,且 sha2 已在 Cargo.toml 依赖中 审计 ID: S-01
This commit is contained in:
@@ -61,10 +61,12 @@ fn is_token_revoked(token: &str, _exp: i64) -> bool {
|
||||
}
|
||||
|
||||
fn token_hash(token: &str) -> String {
|
||||
use std::hash::{Hash, Hasher};
|
||||
let mut hasher = std::collections::hash_map::DefaultHasher::new();
|
||||
token.hash(&mut hasher);
|
||||
format!("{:016x}", hasher.finish())
|
||||
use sha2::{Digest, Sha256};
|
||||
let mut hasher = Sha256::new();
|
||||
hasher.update(token.as_bytes());
|
||||
format!("{:016x}", u64::from_be_bytes(
|
||||
hasher.finalize().as_slice()[0..8].try_into().unwrap_or([0u8; 8])
|
||||
))
|
||||
}
|
||||
|
||||
/// JWT authentication middleware function.
|
||||
|
||||
Reference in New Issue
Block a user