Files
rustdesk-api/lib/jwt/jwt.go
lejianwen edb095ab0b feat!: Add JWT
- `RUSTDESK_API_JWT_KEY`如果设置,将会启用JWT,token自动续期功能将失效
- 此功能是为了server端校验token的合法性
2025-01-15 19:25:28 +08:00

54 lines
1.1 KiB
Go

package jwt
import (
"fmt"
"github.com/golang-jwt/jwt/v5"
"time"
)
type Jwt struct {
Key []byte
TokenExpireDuration time.Duration
}
type UserClaims struct {
UserId uint `json:"user_id"`
jwt.RegisteredClaims
}
func NewJwt(key string, tokenExpireDuration time.Duration) *Jwt {
return &Jwt{
Key: []byte(key),
TokenExpireDuration: tokenExpireDuration,
}
}
func (s *Jwt) GenerateToken(userId uint) string {
t := jwt.NewWithClaims(jwt.SigningMethodHS256,
UserClaims{
UserId: userId,
RegisteredClaims: jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(s.TokenExpireDuration)),
},
})
token, err := t.SignedString(s.Key)
if err != nil {
fmt.Println(err)
return ""
}
return token
}
func (s *Jwt) ParseToken(tokenString string) (uint, error) {
token, err := jwt.ParseWithClaims(tokenString, &UserClaims{}, func(token *jwt.Token) (interface{}, error) {
return s.Key, nil
})
if err != nil {
return 0, err
}
if claims, ok := token.Claims.(*UserClaims); ok && token.Valid {
return claims.UserId, nil
}
return 0, err
}