-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate.go
63 lines (52 loc) · 1.61 KB
/
generate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package oauth
import (
"encoding/base64"
"os"
"strings"
jwt "github.com/dgrijalva/jwt-go"
oauth2 "gopkg.in/oauth2.v3"
"gopkg.in/oauth2.v3/generates"
"gopkg.in/oauth2.v3/utils/uuid"
)
var secret = os.Getenv("SECRET_JWT")
var SigningMethod = jwt.SigningMethodHS256
type TokenGenerate struct {
jwtgen *generates.JWTAccessGenerate
}
type CustomClaims struct {
AccessClaims *generates.JWTAccessClaims `json:"-"`
ClientID string `json:"client_id"`
UserID string `json:"user_id"`
Scope string `json:"scope"`
}
func (c *CustomClaims) Valid() error {
return c.AccessClaims.Valid()
}
func (t *TokenGenerate) Token(data *oauth2.GenerateBasic, isGenRefresh bool) (access, refresh string, err error) {
jwtClaims := &generates.JWTAccessClaims{
ClientID: data.Client.GetID(),
UserID: data.UserID,
ExpiredAt: data.TokenInfo.GetAccessCreateAt().Add(data.TokenInfo.GetAccessExpiresIn()).Unix(),
}
claims := &CustomClaims{
AccessClaims: jwtClaims,
ClientID: jwtClaims.ClientID,
UserID: jwtClaims.UserID,
Scope: data.TokenInfo.GetScope(),
}
token := jwt.NewWithClaims(t.jwtgen.SignedMethod, claims)
access, err = token.SignedString(t.jwtgen.SignedKey)
if err != nil {
return
}
if isGenRefresh {
refresh = base64.URLEncoding.EncodeToString(uuid.NewSHA1(uuid.Must(uuid.NewRandom()), []byte(access)).Bytes())
refresh = strings.ToUpper(strings.TrimRight(refresh, "="))
}
return
}
func newTokenGenerate() *TokenGenerate {
return &TokenGenerate{
jwtgen: generates.NewJWTAccessGenerate([]byte(secret), SigningMethod),
}
}