做统一认证登录
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package jwtutil
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// TestGenerateParseBackwardCompat 旧签发方式产生的 token 必须仍能被解析(向后兼容)
|
||||
func TestGenerateParseBackwardCompat(t *testing.T) {
|
||||
token, err := GenerateToken(1001, "zhangsan", 7, "backend")
|
||||
if err != nil {
|
||||
t.Fatalf("GenerateToken 失败: %v", err)
|
||||
}
|
||||
claims, err := ParseToken(token)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseToken 失败: %v", err)
|
||||
}
|
||||
if claims.UserID != 1001 || claims.Username != "zhangsan" || claims.TenantId != 7 || claims.UserType != "backend" {
|
||||
t.Fatalf("claims 解析不符: %+v", claims)
|
||||
}
|
||||
// 旧 token 无认证中心扩展字段
|
||||
if claims.Sid != "" || claims.ClientID != "" {
|
||||
t.Fatal("旧 token 不应携带 sid/client_id")
|
||||
}
|
||||
}
|
||||
|
||||
// TestSignTokenFallback 未配置 RSA 时自动回落 HS256,且可解析
|
||||
func TestSignTokenFallback(t *testing.T) {
|
||||
token, err := SignToken(TokenOptions{
|
||||
Alg: AlgRS256, // 期望回落到 HS256
|
||||
UserID: 42,
|
||||
Username: "u",
|
||||
TenantID: 3,
|
||||
UserType: "tenant",
|
||||
ClientID: "crm",
|
||||
Sid: "sid-001",
|
||||
Subject: "42",
|
||||
TTL: 15 * time.Minute,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("SignToken 失败: %v", err)
|
||||
}
|
||||
claims, err := ParseToken(token)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseToken 失败: %v", err)
|
||||
}
|
||||
if claims.ClientID != "crm" || claims.Sid != "sid-001" || claims.Subject != "42" {
|
||||
t.Fatalf("扩展 claims 解析不符: %+v", claims)
|
||||
}
|
||||
}
|
||||
|
||||
// TestParseInvalid 非法 token 必须报错
|
||||
func TestParseInvalid(t *testing.T) {
|
||||
if _, err := ParseToken("not-a-token"); err == nil {
|
||||
t.Fatal("非法 token 应返回错误")
|
||||
}
|
||||
if _, err := ParseToken(""); err == nil {
|
||||
t.Fatal("空 token 应返回错误")
|
||||
}
|
||||
}
|
||||
|
||||
// TestHasRSA 无配置时不应 panic
|
||||
func TestHasRSA(t *testing.T) {
|
||||
if HasRSA() {
|
||||
t.Log("已配置 RSA 密钥对")
|
||||
}
|
||||
if Kid() == "" {
|
||||
t.Fatal("kid 不应为空")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user