Skip to content

Commit 07c72de

Browse files
authored
Merge pull request #168 from 959666690/master
add RefreshingValidationHandler when refershing token
2 parents b46cf9f + 12db95c commit 07c72de

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

server/handler.go

+3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ type (
2727
// RefreshingScopeHandler check the scope of the refreshing token
2828
RefreshingScopeHandler func(newScope, oldScope string) (allowed bool, err error)
2929

30+
//RefreshingValidationHandler check if refresh_token is still valid. eg no revocation or other
31+
RefreshingValidationHandler func(ti oauth2.TokenInfo) (allowed bool, err error)
32+
3033
// ResponseErrorHandler response error handing
3134
ResponseErrorHandler func(re *errors.Response)
3235

server/server.go

+17
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ type Server struct {
4747
ClientScopeHandler ClientScopeHandler
4848
UserAuthorizationHandler UserAuthorizationHandler
4949
PasswordAuthorizationHandler PasswordAuthorizationHandler
50+
RefreshingValidationHandler RefreshingValidationHandler
5051
RefreshingScopeHandler RefreshingScopeHandler
5152
ResponseErrorHandler ResponseErrorHandler
5253
InternalErrorHandler InternalErrorHandler
@@ -392,6 +393,22 @@ func (s *Server) GetAccessToken(ctx context.Context, gt oauth2.GrantType, tgr *o
392393
}
393394
}
394395

396+
if validationFn := s.RefreshingValidationHandler; validationFn != nil {
397+
rti, err := s.Manager.LoadRefreshToken(ctx, tgr.Refresh)
398+
if err != nil {
399+
if err == errors.ErrInvalidRefreshToken || err == errors.ErrExpiredRefreshToken {
400+
return nil, errors.ErrInvalidGrant
401+
}
402+
return nil, err
403+
}
404+
allowed, err := validationFn(rti)
405+
if err != nil {
406+
return nil, err
407+
} else if !allowed {
408+
return nil, errors.ErrInvalidScope
409+
}
410+
}
411+
395412
ti, err := s.Manager.RefreshAccessToken(ctx, tgr)
396413
if err != nil {
397414
if err == errors.ErrInvalidRefreshToken || err == errors.ErrExpiredRefreshToken {

server/server_config.go

+6
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ func (s *Server) SetRefreshingScopeHandler(handler RefreshingScopeHandler) {
5454
s.RefreshingScopeHandler = handler
5555
}
5656

57+
// SetRefreshingValidationHandler check if refresh_token is still valid. eg no revocation or other
58+
func (s *Server) SetRefreshingValidationHandler(handler RefreshingValidationHandler) {
59+
s.RefreshingValidationHandler = handler
60+
}
61+
62+
5763
// SetResponseErrorHandler response error handling
5864
func (s *Server) SetResponseErrorHandler(handler ResponseErrorHandler) {
5965
s.ResponseErrorHandler = handler

0 commit comments

Comments
 (0)