Skip to content

Commit 579899c

Browse files
committed
fix(server): creepy @@ string split logic for auth_token
1 parent 9320f1c commit 579899c

File tree

12 files changed

+21
-29
lines changed

12 files changed

+21
-29
lines changed

server/handlers/authorize.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jargons
1616
login resolver has optional param state
1717
-if state found in store, split with @@
1818
- if len > 1 -> response type is code and has code + challenge
19-
- set `nonce@@code` for createAuthToken request so that `c_hash` can be generated
19+
- set `nonce, code` for createAuthToken request so that `c_hash` can be generated
2020
- do not add `nonce` to id_token in code flow, instead set `c_hash` and `at_hash`
2121
2222
@@ -26,8 +26,8 @@ jargons
2626
- add &nonce to login redirect url
2727
login resolver has optional param state
2828
- if state found in store, split with @@
29-
- if len < 1 -> response type is token / id_token and has nonce
30-
- send received nonce for createAuthToken
29+
- if len < 1 -> response type is token / id_token and value is nonce
30+
- send received nonce for createAuthToken with empty code value
3131
- set `nonce` and `at_hash` in `id_token`
3232
**/
3333

@@ -277,7 +277,7 @@ func AuthorizeHandler() gin.HandlerFunc {
277277
if responseType == constants.ResponseTypeToken || responseType == constants.ResponseTypeIDToken {
278278
hostname := parsers.GetHost(gc)
279279
// rollover the session for security
280-
authToken, err := token.CreateAuthToken(gc, user, claims.Roles, scope, claims.LoginMethod, nonce)
280+
authToken, err := token.CreateAuthToken(gc, user, claims.Roles, scope, claims.LoginMethod, nonce, "")
281281
if err != nil {
282282
log.Debug("CreateAuthToken failed: ", err)
283283
handleResponse(gc, responseMode, loginURL, redirectURI, loginError, http.StatusOK)

server/handlers/oauth_callback.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,11 @@ func OAuthCallbackHandler() gin.HandlerFunc {
197197
}
198198
}
199199

200+
// TODO
201+
// use stateValue to get code / nonce
202+
// add code / nonce to id_token
200203
nonce := uuid.New().String()
201-
authToken, err := token.CreateAuthToken(ctx, user, inputRoles, scopes, provider, nonce)
204+
authToken, err := token.CreateAuthToken(ctx, user, inputRoles, scopes, provider, nonce, "")
202205
if err != nil {
203206
log.Debug("Failed to create auth token: ", err)
204207
ctx.JSON(500, gin.H{"error": err.Error()})

server/handlers/token.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ func TokenHandler() gin.HandlerFunc {
246246
fmt.Println("=> code", code)
247247
fmt.Println("=> nonce", nonce)
248248

249-
authToken, err := token.CreateAuthToken(gc, user, roles, scope, loginMethod, nonce)
249+
authToken, err := token.CreateAuthToken(gc, user, roles, scope, loginMethod, nonce, code)
250250
if err != nil {
251251
log.Debug("Error creating auth token: ", err)
252252
gc.JSON(http.StatusUnauthorized, gin.H{

server/handlers/verify_email.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ func VerifyEmailHandler() gin.HandlerFunc {
101101
}
102102

103103
nonce := uuid.New().String()
104-
authToken, err := token.CreateAuthToken(c, user, roles, scope, loginMethod, nonce)
104+
authToken, err := token.CreateAuthToken(c, user, roles, scope, loginMethod, nonce, "")
105105
if err != nil {
106106
log.Debug("Error creating auth token: ", err)
107107
errorRes["error_description"] = err.Error()

server/resolvers/login.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,14 @@ func LoginResolver(ctx context.Context, params model.LoginInput) (*model.AuthRes
155155
codeChallenge = authorizeStateSplit[1]
156156

157157
fmt.Println("=> code info", authorizeStateSplit)
158-
nonce = nonce + "@@" + code
159158
} else {
160159
nonce = authorizeState
161160
}
162161
go memorystore.Provider.RemoveState(refs.StringValue(params.State))
163162
}
164163
}
165164

166-
authToken, err := token.CreateAuthToken(gc, user, roles, scope, constants.AuthRecipeMethodBasicAuth, nonce)
165+
authToken, err := token.CreateAuthToken(gc, user, roles, scope, constants.AuthRecipeMethodBasicAuth, nonce, code)
167166
if err != nil {
168167
log.Debug("Failed to create auth token", err)
169168
return res, err
@@ -186,8 +185,8 @@ func LoginResolver(ctx context.Context, params model.LoginInput) (*model.AuthRes
186185
sessionStoreKey := constants.AuthRecipeMethodBasicAuth + ":" + user.ID
187186
memorystore.Provider.SetUserSession(sessionStoreKey, constants.TokenTypeSessionToken+"_"+authToken.FingerPrint, authToken.FingerPrintHash)
188187
memorystore.Provider.SetUserSession(sessionStoreKey, constants.TokenTypeAccessToken+"_"+authToken.FingerPrint, authToken.AccessToken.Token)
188+
// TODO add to other login options as well
189189
// Code challenge could be optional if PKCE flow is not used
190-
191190
if code != "" {
192191
fmt.Println("=> setting the state here....")
193192
if err := memorystore.Provider.SetState(code, codeChallenge+"@@"+authToken.FingerPrintHash); err != nil {

server/resolvers/magic_link_login.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/authorizerdev/authorizer/server/graph/model"
1616
"github.com/authorizerdev/authorizer/server/memorystore"
1717
"github.com/authorizerdev/authorizer/server/parsers"
18+
"github.com/authorizerdev/authorizer/server/refs"
1819
"github.com/authorizerdev/authorizer/server/token"
1920
"github.com/authorizerdev/authorizer/server/utils"
2021
"github.com/authorizerdev/authorizer/server/validators"
@@ -185,7 +186,7 @@ func MagicLinkLoginResolver(ctx context.Context, params model.MagicLinkLoginInpu
185186
}
186187
redirectURLParams := "&roles=" + strings.Join(inputRoles, ",")
187188
if params.State != nil {
188-
redirectURLParams = redirectURLParams + "&state=" + *params.State
189+
redirectURLParams = redirectURLParams + "&state=" + refs.StringValue(params.State)
189190
}
190191
if params.Scope != nil && len(params.Scope) > 0 {
191192
redirectURLParams = redirectURLParams + "&scope=" + strings.Join(params.Scope, " ")

server/resolvers/session.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func SessionResolver(ctx context.Context, params *model.SessionQueryInput) (*mod
7272
}
7373

7474
nonce := uuid.New().String()
75-
authToken, err := token.CreateAuthToken(gc, user, claimRoles, scope, claims.LoginMethod, nonce)
75+
authToken, err := token.CreateAuthToken(gc, user, claimRoles, scope, claims.LoginMethod, nonce, "")
7676
if err != nil {
7777
log.Debug("Failed to create auth token: ", err)
7878
return res, err

server/resolvers/signup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ func SignupResolver(ctx context.Context, params model.SignUpInput) (*model.AuthR
258258
nonce = nonce + "@@" + code
259259
}
260260

261-
authToken, err := token.CreateAuthToken(gc, user, roles, scope, constants.AuthRecipeMethodBasicAuth, nonce)
261+
authToken, err := token.CreateAuthToken(gc, user, roles, scope, constants.AuthRecipeMethodBasicAuth, nonce, code)
262262
if err != nil {
263263
log.Debug("Failed to create auth token: ", err)
264264
return res, err

server/resolvers/verify_email.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func VerifyEmailResolver(ctx context.Context, params model.VerifyEmailInput) (*m
8686
roles := strings.Split(user.Roles, ",")
8787
scope := []string{"openid", "email", "profile"}
8888
nonce := uuid.New().String()
89-
authToken, err := token.CreateAuthToken(gc, user, roles, scope, loginMethod, nonce)
89+
authToken, err := token.CreateAuthToken(gc, user, roles, scope, loginMethod, nonce, "")
9090
if err != nil {
9191
log.Debug("Failed to create auth token: ", err)
9292
return res, err

server/resolvers/verify_otp.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func VerifyOtpResolver(ctx context.Context, params model.VerifyOTPRequest) (*mod
5959
roles := strings.Split(user.Roles, ",")
6060
scope := []string{"openid", "email", "profile"}
6161
nonce := uuid.New().String()
62-
authToken, err := token.CreateAuthToken(gc, user, roles, scope, loginMethod, nonce)
62+
authToken, err := token.CreateAuthToken(gc, user, roles, scope, loginMethod, nonce, "")
6363
if err != nil {
6464
log.Debug("Failed to create auth token: ", err)
6565
return res, err

0 commit comments

Comments
 (0)