Skip to content
This repository has been archived by the owner on Dec 7, 2020. It is now read-only.

Commit

Permalink
Merge pull request #234 from antmanler/fix233
Browse files Browse the repository at this point in the history
[*] Fix #233 store encrypted refresh token
  • Loading branch information
gambol99 authored Jun 6, 2017
2 parents add1a35 + d0c2a09 commit 3234321
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 11 deletions.
13 changes: 6 additions & 7 deletions handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ func (r *oauthProxy) logoutHandler(cx echo.Context) error {
}
// step: can either use the id token or the refresh token
identityToken := user.token.Encode()
if refresh, err := r.retrieveRefreshToken(cx.Request(), user); err == nil {
if refresh, _, err := r.retrieveRefreshToken(cx.Request(), user); err == nil {
identityToken = refresh
}
r.clearAllCookies(cx.Request(), cx.Response().Writer)
Expand Down Expand Up @@ -465,19 +465,18 @@ func (r *oauthProxy) metricsHandler(cx echo.Context) error {
}

// retrieveRefreshToken retrieves the refresh token from store or cookie
func (r *oauthProxy) retrieveRefreshToken(req *http.Request, user *userContext) (string, error) {
var token string
var err error

func (r *oauthProxy) retrieveRefreshToken(req *http.Request, user *userContext) (token, ecrypted string, err error) {
switch r.useStore() {
case true:
token, err = r.GetRefreshToken(user.token)
default:
token, err = r.getRefreshTokenFromCookie(req)
}
if err != nil {
return "", err
return
}

return decodeText(token, r.config.EncryptionKey)
ecrypted = token // returns encryped, avoid encoding twice
token, err = decodeText(token, r.config.EncryptionKey)
return
}
8 changes: 4 additions & 4 deletions middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ func (r *oauthProxy) authenticationMiddleware(resource *Resource) echo.Middlewar
}).Infof("accces token for user has expired, attemping to refresh the token")

// step: check if the user has refresh token
refresh, err := r.retrieveRefreshToken(cx.Request(), user)
refresh, encrypted, err := r.retrieveRefreshToken(cx.Request(), user)
if err != nil {
log.WithFields(log.Fields{
"client_ip": clientIP,
Expand Down Expand Up @@ -212,15 +212,15 @@ func (r *oauthProxy) authenticationMiddleware(resource *Resource) echo.Middlewar
r.dropAccessTokenCookie(cx.Request(), cx.Response().Writer, accessToken, expiresIn)

if r.useStore() {
go func(old, new jose.JWT, state string) {
go func(old, new jose.JWT, encrypted string) {
if err := r.DeleteRefreshToken(old); err != nil {
log.WithFields(log.Fields{"error": err.Error()}).Errorf("failed to remove old token")
}
if err := r.StoreRefreshToken(new, state); err != nil {
if err := r.StoreRefreshToken(new, encrypted); err != nil {
log.WithFields(log.Fields{"error": err.Error()}).Errorf("failed to store refresh token")
return
}
}(user.token, token, refresh)
}(user.token, token, encrypted)
}
// update the with the new access token and inject into the context
user.token = token
Expand Down

0 comments on commit 3234321

Please sign in to comment.