Skip to content

Commit e5fbaa2

Browse files
committed
fix: pkce flow for oauth login
1 parent 3bd3a52 commit e5fbaa2

File tree

4 files changed

+17
-6
lines changed

4 files changed

+17
-6
lines changed

server/handlers/authorize.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ func AuthorizeHandler() gin.HandlerFunc {
123123

124124
// TODO add state with timeout
125125
// used for response mode query or fragment
126-
authState := "state=" + state + "&scope=" + strings.Join(scope, " ") + "&redirect_uri=" + redirectURI
126+
authState := "state=" + state + "&scope=" + scopeString + "&redirect_uri=" + redirectURI
127127
if responseType == constants.ResponseTypeCode {
128128
authState += "&code=" + code
129129
if err := memorystore.Provider.SetState(state, code+"@@"+codeChallenge); err != nil {

server/handlers/oauth_callback.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,16 @@ func OAuthCallbackHandler() gin.HandlerFunc {
5353
stateValue := sessionSplit[0]
5454
redirectURL := sessionSplit[1]
5555
inputRoles := strings.Split(sessionSplit[2], ",")
56-
scopes := strings.Split(sessionSplit[3], ",")
56+
scopeString := sessionSplit[3]
57+
scopes := []string{}
58+
if scopeString != "" {
59+
if strings.Contains(scopeString, ",") {
60+
scopes = strings.Split(scopeString, ",")
61+
}
62+
if strings.Contains(scopeString, " ") {
63+
scopes = strings.Split(scopeString, " ")
64+
}
65+
}
5766
var user *models.User
5867
oauthCode := ctx.Request.FormValue("code")
5968
if oauthCode == "" {

server/handlers/token.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package handlers
33
import (
44
"crypto/sha256"
55
"encoding/base64"
6+
"fmt"
67
"net/http"
78
"strings"
89
"time"
@@ -105,7 +106,7 @@ func TokenHandler() gin.HandlerFunc {
105106

106107
if codeVerifier == "" && clientSecret == "" {
107108
gc.JSON(http.StatusBadRequest, gin.H{
108-
"error": "invalid_dat",
109+
"error": "invalid_data",
109110
"error_description": "The code verifier or client secret is required",
110111
})
111112
return
@@ -263,12 +264,14 @@ func TokenHandler() gin.HandlerFunc {
263264
"roles": roles,
264265
"expires_in": expiresIn,
265266
}
266-
267+
fmt.Println("=> scopes:", scope)
268+
fmt.Println("=> refreshToken:", authToken.RefreshToken)
267269
if authToken.RefreshToken != nil {
270+
log.Debug("Refresh token is present: ", fmt.Sprintf("%s:%s", sessionKey, constants.TokenTypeRefreshToken+"_"+authToken.FingerPrint))
268271
res["refresh_token"] = authToken.RefreshToken.Token
269272
memorystore.Provider.SetUserSession(sessionKey, constants.TokenTypeRefreshToken+"_"+authToken.FingerPrint, authToken.RefreshToken.Token, authToken.RefreshToken.ExpiresAt)
270273
}
271-
274+
fmt.Printf("=> res %v", res)
272275
gc.JSON(http.StatusOK, res)
273276
}
274277
}

server/token/auth_token.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ func CreateAuthToken(gc *gin.Context, user *models.User, roles, scope []string,
9191
AccessToken: &JWTToken{Token: accessToken, ExpiresAt: accessTokenExpiresAt},
9292
IDToken: &JWTToken{Token: idToken, ExpiresAt: idTokenExpiresAt},
9393
}
94-
9594
if utils.StringSliceContains(scope, "offline_access") {
9695
refreshToken, refreshTokenExpiresAt, err := CreateRefreshToken(user, roles, scope, hostname, nonce, loginMethod)
9796
if err != nil {

0 commit comments

Comments
 (0)