@@ -12,57 +12,48 @@ import (
12
12
const (
13
13
AuthorizationPrefixBearer = "Bearer"
14
14
DefaultTokenDuration = time .Hour * 24 * 7
15
- DefaultRefreshDuration = time .Hour * 24 * 7
16
15
)
17
16
18
- var _ authorizer.Authorizer = & JwtAuth {}
17
+ var _ authorizer.Authorizer [ int64 ] = & JwtAuth [ int64 ] {}
19
18
20
- type SignedDetails struct {
19
+ type SignedDetails [ T authorizer. UID ] struct {
21
20
jwt.StandardClaims
22
- Username string `json:"username ,omitempty"`
23
- Roles string `json:"roles,omitempty"`
21
+ UID T `json:"uid ,omitempty"`
22
+ Roles string `json:"roles,omitempty"`
24
23
}
25
24
26
- type JwtAuth struct {
27
- secret []byte
28
- signingMethod jwt.SigningMethod
29
- signedTokenDuration time.Duration
30
- signedRefreshDuration time.Duration
31
- mu sync.RWMutex // 添加互斥锁
25
+ type JwtAuth [T authorizer.UID ] struct {
26
+ secret []byte
27
+ signingMethod jwt.SigningMethod
28
+ signedTokenDuration time.Duration
29
+ mu sync.RWMutex // 添加互斥锁
32
30
}
33
31
34
- type Option func (* JwtAuth )
32
+ type Option [ T authorizer. UID ] func (* JwtAuth [ T ] )
35
33
36
- func NewJwtAuth (secret string , opts ... Option ) * JwtAuth {
37
- ja := & JwtAuth {
38
- secret : []byte (secret ),
39
- signingMethod : jwt .SigningMethodHS256 ,
40
- signedTokenDuration : DefaultTokenDuration ,
41
- signedRefreshDuration : DefaultRefreshDuration ,
34
+ func NewJwtAuth [T authorizer.UID ](secret string , opts ... Option [T ]) * JwtAuth [T ] {
35
+ ja := & JwtAuth [T ]{
36
+ secret : []byte (secret ),
37
+ signingMethod : jwt .SigningMethodHS256 ,
38
+ signedTokenDuration : DefaultTokenDuration ,
42
39
}
43
40
for _ , opt := range opts {
44
41
opt (ja )
45
42
}
46
43
return ja
47
44
}
48
45
49
- func WithTokenDuration (d time.Duration ) Option {
50
- return func (ja * JwtAuth ) {
46
+ func WithTokenDuration [ T authorizer. UID ] (d time.Duration ) Option [ T ] {
47
+ return func (ja * JwtAuth [ T ] ) {
51
48
ja .signedTokenDuration = d
52
49
}
53
50
}
54
51
55
- func WithRefreshTokenDuration (d time.Duration ) Option {
56
- return func (ja * JwtAuth ) {
57
- ja .signedRefreshDuration = d
58
- }
59
- }
60
-
61
- func (g * JwtAuth ) GenerateToken (subject , username string , roles ... string ) (* authorizer.Token , error ) {
52
+ func (g * JwtAuth [T ]) GenerateToken (uid T , subject string , roles ... string ) (* authorizer.Token , error ) {
62
53
expiresAt := time .Now ().Local ().Add (g .signedTokenDuration )
63
- claims := & SignedDetails {
64
- Username : username ,
65
- Roles : strings .Join (roles , "," ),
54
+ claims := & SignedDetails [ T ] {
55
+ UID : uid ,
56
+ Roles : strings .Join (roles , "," ),
66
57
StandardClaims : jwt.StandardClaims {
67
58
Subject : subject ,
68
59
ExpiresAt : expiresAt .Unix (),
@@ -80,8 +71,8 @@ func (g *JwtAuth) GenerateToken(subject, username string, roles ...string) (*aut
80
71
}, nil
81
72
}
82
73
83
- func (g * JwtAuth ) ParseToken (signedToken string ) (* authorizer.Claims , error ) {
84
- claims := & SignedDetails {}
74
+ func (g * JwtAuth [ T ] ) ParseToken (signedToken string ) (* authorizer.Claims [ T ] , error ) {
75
+ claims := & SignedDetails [ T ] {}
85
76
_ , err := jwt .ParseWithClaims (signedToken , claims , func (token * jwt.Token ) (interface {}, error ) {
86
77
if _ , ok := token .Method .(* jwt.SigningMethodHMAC ); ! ok {
87
78
return nil , jwt .ErrSignatureInvalid
@@ -91,26 +82,20 @@ func (g *JwtAuth) ParseToken(signedToken string) (*authorizer.Claims, error) {
91
82
if err != nil {
92
83
return nil , err
93
84
}
94
- return & authorizer.Claims {
95
- Subject : claims .Subject ,
96
- Username : claims .Username ,
97
- Roles : claims .Roles ,
98
- Exp : claims .ExpiresAt ,
85
+ return & authorizer.Claims [ T ] {
86
+ UID : claims .UID ,
87
+ Subject : claims .Subject ,
88
+ Roles : claims .Roles ,
89
+ Exp : claims .ExpiresAt ,
99
90
}, nil
100
91
}
101
92
102
- func (g * JwtAuth ) ParseRoles (roles string ) []string {
93
+ func (g * JwtAuth [ T ] ) ParseRoles (roles string ) []string {
103
94
return strings .Split (roles , "," )
104
95
}
105
96
106
- func (g * JwtAuth ) SetTokenDuration (duration time.Duration ) {
97
+ func (g * JwtAuth [ T ] ) SetTokenDuration (duration time.Duration ) {
107
98
g .mu .Lock ()
108
99
defer g .mu .Unlock ()
109
100
g .signedTokenDuration = duration
110
101
}
111
-
112
- func (g * JwtAuth ) SetRefreshTokenDuration (duration time.Duration ) {
113
- g .mu .Lock ()
114
- defer g .mu .Unlock ()
115
- g .signedRefreshDuration = duration
116
- }
0 commit comments