Skip to content

Commit 031d2cc

Browse files
committed
增加令牌模型、客户端模型
1 parent 15212ba commit 031d2cc

File tree

7 files changed

+191
-30
lines changed

7 files changed

+191
-30
lines changed

const.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ func (rt ResponseType) String() string {
2424
type GrantType byte
2525

2626
const (
27-
// AuthorizationCode 授权码模式
28-
AuthorizationCode GrantType = 1 << (iota + 1)
27+
// AuthorizationCodeCredentials 授权码模式
28+
AuthorizationCodeCredentials GrantType = 1 << (iota + 1)
2929
// PasswordCredentials 密码模式
3030
PasswordCredentials
3131
// ClientCredentials 客户端模式

generate.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ type (
1313
// AuthorizeTokenGenerate 授权令牌生成接口
1414
AuthorizeTokenGenerate interface {
1515
// 授权令牌
16-
Token(data *TokenGenerateBasic) (string, error)
16+
Token(data *TokenGenerateBasic) (token string, err error)
1717
}
1818

1919
// TokenGenerate 令牌生成接口
2020
TokenGenerate interface {
2121
// 生成令牌
22-
Token(data *TokenGenerateBasic, isGenRefresh bool) (string, string, error)
22+
Token(data *TokenGenerateBasic, isGenRefresh bool) (token string, refresh string, err error)
2323
}
2424
)

manage.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type TokenGenerateRequest struct {
88
RedirectURI string // 重定向URI
99
Scope string // 授权范围
1010
Code string // 授权码(授权码模式使用)
11-
IsGenerateRefresh bool // 是否生成刷新令牌
11+
IsGenerateRefresh bool // 是否生成更新令牌
1212
}
1313

1414
// Manager OAuth2授权管理接口
@@ -18,13 +18,13 @@ type Manager interface {
1818
// tgr 生成令牌的请求参数
1919
GenerateAuthToken(rt ResponseType, tgr *TokenGenerateRequest) (token string, err error)
2020

21-
// GenerateToken 生成访问令牌、刷新令牌
21+
// GenerateToken 生成访问令牌、更新令牌
2222
// rt 授权模式
2323
// tgr 生成令牌的请求参数
2424
GenerateToken(rt GrantType, tgr *TokenGenerateRequest) (token, refresh string, err error)
2525

26-
// RefreshToken 使用刷新令牌更新访问令牌
27-
// refresh 刷新令牌
26+
// RefreshToken 使用更新令牌更新访问令牌
27+
// refresh 更新令牌
2828
// scope 作用域
2929
RefreshToken(refresh, scope string) (token string, err error)
3030

@@ -35,6 +35,6 @@ type Manager interface {
3535
// CheckToken 令牌检查,如果存在则返回令牌信息
3636
CheckToken(token string) (ti TokenInfo, err error)
3737

38-
// CheckRefreshToken 访问令牌检查,如果存在则返回令牌信息
38+
// CheckRefreshToken 更新令牌检查,如果存在则返回令牌信息
3939
CheckRefreshToken(refresh string) (ti TokenInfo, err error)
4040
}

manage/manager.go

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,28 @@ import (
99

1010
// Config 授权配置参数
1111
type Config struct {
12-
TokenExpiresIn time.Duration // 令牌有效期
13-
RefreshExpiresIn time.Duration // 刷新令牌有效期
12+
TokenExp time.Duration // 令牌有效期
13+
RefreshExp time.Duration // g令牌有效期
1414
}
1515

1616
// NewManager 创建Manager的实例
1717
func NewManager() *Manager {
18-
return nil
18+
m := &Manager{
19+
injector: inject.New(),
20+
}
21+
// 设定参数默认值
22+
23+
// 设定授权码的有效期为10分钟
24+
m.SetRTConfig(oauth2.Code, &Config{TokenExp: time.Minute * 10})
25+
// 设定简化模式授权令牌的有效期为1小时
26+
m.SetRTConfig(oauth2.Token, &Config{TokenExp: time.Hour * 1})
27+
28+
// 设定授权码模式令牌的有效期为2小时,g令牌的有效期为3天
29+
m.SetGTConfig(oauth2.PasswordCredentials, &Config{TokenExp: time.Hour * 2, RefreshExp: time.Hour * 24 * 3})
30+
31+
// 设定客户端模式令牌的有效期为1小时
32+
m.SetGTConfig(oauth2.ClientCredentials, &Config{TokenExp: time.Hour * 2})
33+
return m
1934
}
2035

2136
// Manager OAuth2授权管理
@@ -149,7 +164,7 @@ func (m *Manager) GenerateAuthToken(rt oauth2.ResponseType, tgr *oauth2.TokenGen
149164
ti.SetRedirectURI(tgr.RedirectURI)
150165
ti.SetScope(tgr.Scope)
151166
ti.SetTokenCreateAt(td.CreateAt)
152-
ti.SetTokenExpiresIn(m.rtcfg[rt].TokenExpiresIn)
167+
ti.SetTokenExpiresIn(m.rtcfg[rt].TokenExp)
153168
ti.SetToken(tv)
154169
err = stor.Create(ti)
155170
if err != nil {
@@ -188,7 +203,7 @@ func (m *Manager) checkAuthToken(tgr *oauth2.TokenGenerateRequest) (err error) {
188203
// gt 授权模式
189204
// tgr 生成令牌的参数
190205
func (m *Manager) GenerateToken(gt oauth2.GrantType, tgr *oauth2.TokenGenerateRequest) (token, refresh string, err error) {
191-
if gt == oauth2.AuthorizationCode {
206+
if gt == oauth2.AuthorizationCodeCredentials {
192207
err = m.checkAuthToken(tgr)
193208
if err != nil {
194209
return
@@ -217,11 +232,11 @@ func (m *Manager) GenerateToken(gt oauth2.GrantType, tgr *oauth2.TokenGenerateRe
217232
ti.SetRedirectURI(tgr.RedirectURI)
218233
ti.SetScope(tgr.Scope)
219234
ti.SetTokenCreateAt(td.CreateAt)
220-
ti.SetTokenExpiresIn(m.gtcfg[gt].TokenExpiresIn)
235+
ti.SetTokenExpiresIn(m.gtcfg[gt].TokenExp)
221236
ti.SetToken(tv)
222237
if rv != "" {
223238
ti.SetRefreshCreateAt(td.CreateAt)
224-
ti.SetRefreshExpiresIn(m.gtcfg[gt].RefreshExpiresIn)
239+
ti.SetRefreshExpiresIn(m.gtcfg[gt].RefreshExp)
225240
ti.SetRefresh(rv)
226241
}
227242
err = stor.Create(ti)
@@ -236,7 +251,7 @@ func (m *Manager) GenerateToken(gt oauth2.GrantType, tgr *oauth2.TokenGenerateRe
236251
return
237252
}
238253

239-
// RefreshToken 刷新令牌
254+
// RefreshToken 更新访问令牌
240255
func (m *Manager) RefreshToken(refresh, scope string) (token string, err error) {
241256
ti, err := m.CheckRefreshToken(refresh)
242257
if err != nil {
@@ -305,7 +320,7 @@ func (m *Manager) CheckToken(token string) (info oauth2.TokenInfo, err error) {
305320
} else if ti == nil {
306321
err = ErrTokenInvalid
307322
return
308-
} else if ti.GetRefresh() != "" && ti.GetRefreshCreateAt().Add(ti.GetRefreshExpiresIn()).Before(ct) { // 检查刷新令牌是否过期
323+
} else if ti.GetRefresh() != "" && ti.GetRefreshCreateAt().Add(ti.GetRefreshExpiresIn()).Before(ct) { // 检查g令牌是否过期
309324
if verr := stor.ExpiredByRefresh(ti.GetRefresh()); verr != nil {
310325
err = verr
311326
return
@@ -327,7 +342,7 @@ func (m *Manager) CheckToken(token string) (info oauth2.TokenInfo, err error) {
327342
return
328343
}
329344

330-
// CheckRefreshToken 访问令牌检查
345+
// CheckRefreshToken 更新令牌检查
331346
func (m *Manager) CheckRefreshToken(refresh string) (info oauth2.TokenInfo, err error) {
332347
if refresh == "" {
333348
err = ErrRefreshInvalid

model.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import "time"
66
type (
77
// ClientInfo 客户端信息模型接口
88
ClientInfo interface {
9-
// 客户端唯一标识
9+
// 客户端ID
1010
GetID() string
1111
// 客户端秘钥
1212
GetSecret() string
@@ -18,13 +18,13 @@ type (
1818

1919
// TokenInfo 令牌信息模型接口
2020
TokenInfo interface {
21-
// 客户端标识
21+
// 客户端ID
2222
GetClientID() string
23-
// 设置客户端标识
23+
// 设置客户端ID
2424
SetClientID(string)
25-
// 用户标识
25+
// 用户ID
2626
GetUserID() string
27-
// 设置用户标识
27+
// 设置用户ID
2828
SetUserID(string)
2929
// 重定向URI
3030
GetRedirectURI() string
@@ -48,17 +48,17 @@ type (
4848
// 设置令牌有效期
4949
SetTokenExpiresIn(time.Duration)
5050

51-
// 刷新令牌
51+
// 更新令牌
5252
GetRefresh() string
53-
// 设置刷新令牌
53+
// 设置更新令牌
5454
SetRefresh(string)
55-
// 刷新令牌创建时间
55+
// 更新令牌创建时间
5656
GetRefreshCreateAt() time.Time
57-
// 设置刷新令牌创建时间
57+
// 设置更新令牌创建时间
5858
SetRefreshCreateAt(time.Time)
59-
// 刷新令牌有效期
59+
// 更新令牌有效期
6060
GetRefreshExpiresIn() time.Duration
61-
// 设置刷新令牌有效期
61+
// 设置更新令牌有效期
6262
SetRefreshExpiresIn(time.Duration)
6363
}
6464
)

models/client.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package models
2+
3+
// Client 客户端信息
4+
type Client struct {
5+
ClientID string `bson:"ClientID"` // 客户端ID
6+
Secret string `bson:"Secret"` // 密钥
7+
Domain string `bson:"Domain"` // 域名url
8+
}
9+
10+
// GetID 客户端ID
11+
func (c *Client) GetID() string {
12+
return c.ClientID
13+
}
14+
15+
// GetSecret 客户端秘钥
16+
func (c *Client) GetSecret() string {
17+
return c.Secret
18+
}
19+
20+
// GetDomain 域名URL
21+
func (c *Client) GetDomain() string {
22+
return c.Domain
23+
}
24+
25+
// GetRetainData 自定义数据
26+
func (c *Client) GetRetainData() interface{} {
27+
return nil
28+
}

models/token.go

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package models
2+
3+
import "time"
4+
5+
// Token 令牌信息
6+
type Token struct {
7+
ID int64 `bson:"_id"` // 唯一标识
8+
ClientID string `bson:"ClientID"` // 客户端标识
9+
UserID string `bson:"UserID"` // 用户标识
10+
RedirectURI string `bson:"RedirectURI"` // 重定向URI
11+
Scope string `bson:"Scope"` // 权限范围
12+
Token string `bson:"Token"` // 令牌
13+
TokenCreateAt time.Time `bson:"TokenCreateAt"` // 令牌创建时间
14+
TokenExpiresIn time.Duration `bson:"TokenExpiresIn"` // 令牌有效期
15+
Refresh string `bson:"Refresh"` // 更新令牌
16+
RefreshCreateAt time.Time `bson:"RefreshCreateAt"` // 更新令牌创建时间
17+
RefreshExpiresIn time.Duration `bson:"RefreshExpiresIn"` // 更新令牌有效期
18+
}
19+
20+
// GetClientID 客户端ID
21+
func (t *Token) GetClientID() string {
22+
return t.ClientID
23+
}
24+
25+
// SetClientID 设置客户端ID
26+
func (t *Token) SetClientID(clientID string) {
27+
t.ClientID = clientID
28+
}
29+
30+
// GetUserID 用户ID
31+
func (t *Token) GetUserID() string {
32+
return t.UserID
33+
}
34+
35+
// SetUserID 设置用户ID
36+
func (t *Token) SetUserID(userID string) {
37+
t.UserID = userID
38+
}
39+
40+
// GetRedirectURI 重定向URI
41+
func (t *Token) GetRedirectURI() string {
42+
return t.RedirectURI
43+
}
44+
45+
// SetRedirectURI 设置重定向URI
46+
func (t *Token) SetRedirectURI(redirectURI string) {
47+
t.RedirectURI = redirectURI
48+
}
49+
50+
// GetScope 权限范围
51+
func (t *Token) GetScope() string {
52+
return t.Scope
53+
}
54+
55+
// SetScope 设置权限范围
56+
func (t *Token) SetScope(scope string) {
57+
t.Scope = scope
58+
}
59+
60+
// GetToken 令牌
61+
func (t *Token) GetToken() string {
62+
return t.Token
63+
}
64+
65+
// SetToken 设置令牌
66+
func (t *Token) SetToken(token string) {
67+
t.Token = token
68+
}
69+
70+
// GetTokenCreateAt 令牌创建时间
71+
func (t *Token) GetTokenCreateAt() time.Time {
72+
return t.TokenCreateAt
73+
}
74+
75+
// SetTokenCreateAt 设置令牌创建时间
76+
func (t *Token) SetTokenCreateAt(createAt time.Time) {
77+
t.TokenCreateAt = createAt
78+
}
79+
80+
// GetTokenExpiresIn 令牌有效期
81+
func (t *Token) GetTokenExpiresIn() time.Duration {
82+
return t.TokenExpiresIn
83+
}
84+
85+
// SetTokenExpiresIn 设置令牌有效期
86+
func (t *Token) SetTokenExpiresIn(exp time.Duration) {
87+
t.TokenExpiresIn = exp
88+
}
89+
90+
// GetRefresh 更新令牌
91+
func (t *Token) GetRefresh() string {
92+
return t.Refresh
93+
}
94+
95+
// SetRefresh 设置更新令牌
96+
func (t *Token) SetRefresh(refresh string) {
97+
t.Refresh = refresh
98+
}
99+
100+
// GetRefreshCreateAt 更新令牌创建时间
101+
func (t *Token) GetRefreshCreateAt() time.Time {
102+
return t.RefreshCreateAt
103+
}
104+
105+
// SetRefreshCreateAt 设置更新令牌创建时间
106+
func (t *Token) SetRefreshCreateAt(createAt time.Time) {
107+
t.RefreshCreateAt = createAt
108+
}
109+
110+
// GetRefreshExpiresIn 更新令牌有效期
111+
func (t *Token) GetRefreshExpiresIn() time.Duration {
112+
return t.RefreshExpiresIn
113+
}
114+
115+
// SetRefreshExpiresIn 设置更新令牌有效期
116+
func (t *Token) SetRefreshExpiresIn(exp time.Duration) {
117+
t.RefreshExpiresIn = exp
118+
}

0 commit comments

Comments
 (0)