Skip to content

Commit e6a4670

Browse files
committed
fix: add provider to token creation
1 parent 64d64b4 commit e6a4670

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

server/handlers/authorize.go

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

221221
// if user is logged in
222-
// based on the response type, generate the response
222+
// based on the response type code, generate the response
223223
if isResponseTypeCode {
224224
// rollover the session for security
225225
go memorystore.Provider.DeleteUserSession(user.ID, claims.Nonce)

server/token/auth_token.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,17 @@ type SessionData struct {
4444
Nonce string `json:"nonce"`
4545
IssuedAt int64 `json:"iat"`
4646
ExpiresAt int64 `json:"exp"`
47+
Provider string `json:"provider"`
4748
}
4849

4950
// CreateSessionToken creates a new session token
50-
func CreateSessionToken(user models.User, nonce string, roles, scope []string) (*SessionData, string, error) {
51+
func CreateSessionToken(user models.User, nonce string, roles, scope []string, provider string) (*SessionData, string, error) {
5152
fingerPrintMap := &SessionData{
5253
Nonce: nonce,
5354
Roles: roles,
5455
Subject: user.ID,
5556
Scope: scope,
57+
Provider: provider,
5658
IssuedAt: time.Now().Unix(),
5759
ExpiresAt: time.Now().AddDate(1, 0, 0).Unix(),
5860
}
@@ -66,19 +68,19 @@ func CreateSessionToken(user models.User, nonce string, roles, scope []string) (
6668
}
6769

6870
// CreateAuthToken creates a new auth token when userlogs in
69-
func CreateAuthToken(gc *gin.Context, user models.User, roles, scope []string) (*Token, error) {
71+
func CreateAuthToken(gc *gin.Context, user models.User, roles, scope []string, provider string) (*Token, error) {
7072
hostname := parsers.GetHost(gc)
7173
nonce := uuid.New().String()
72-
_, fingerPrintHash, err := CreateSessionToken(user, nonce, roles, scope)
74+
_, fingerPrintHash, err := CreateSessionToken(user, nonce, roles, scope, provider)
7375
if err != nil {
7476
return nil, err
7577
}
76-
accessToken, accessTokenExpiresAt, err := CreateAccessToken(user, roles, scope, hostname, nonce)
78+
accessToken, accessTokenExpiresAt, err := CreateAccessToken(user, roles, scope, hostname, nonce, provider)
7779
if err != nil {
7880
return nil, err
7981
}
8082

81-
idToken, idTokenExpiresAt, err := CreateIDToken(user, roles, hostname, nonce)
83+
idToken, idTokenExpiresAt, err := CreateIDToken(user, roles, hostname, nonce, provider)
8284
if err != nil {
8385
return nil, err
8486
}
@@ -91,7 +93,7 @@ func CreateAuthToken(gc *gin.Context, user models.User, roles, scope []string) (
9193
}
9294

9395
if utils.StringSliceContains(scope, "offline_access") {
94-
refreshToken, refreshTokenExpiresAt, err := CreateRefreshToken(user, roles, scope, hostname, nonce)
96+
refreshToken, refreshTokenExpiresAt, err := CreateRefreshToken(user, roles, scope, hostname, nonce, provider)
9597
if err != nil {
9698
return nil, err
9799
}
@@ -103,7 +105,7 @@ func CreateAuthToken(gc *gin.Context, user models.User, roles, scope []string) (
103105
}
104106

105107
// CreateRefreshToken util to create JWT token
106-
func CreateRefreshToken(user models.User, roles, scopes []string, hostname, nonce string) (string, int64, error) {
108+
func CreateRefreshToken(user models.User, roles, scopes []string, hostname, nonce, provider string) (string, int64, error) {
107109
// expires in 1 year
108110
expiryBound := time.Hour * 8760
109111
expiresAt := time.Now().Add(expiryBound).Unix()
@@ -121,6 +123,7 @@ func CreateRefreshToken(user models.User, roles, scopes []string, hostname, nonc
121123
"roles": roles,
122124
"scope": scopes,
123125
"nonce": nonce,
126+
"provider": provider,
124127
}
125128

126129
token, err := SignJWTToken(customClaims)
@@ -133,7 +136,7 @@ func CreateRefreshToken(user models.User, roles, scopes []string, hostname, nonc
133136

134137
// CreateAccessToken util to create JWT token, based on
135138
// user information, roles config and CUSTOM_ACCESS_TOKEN_SCRIPT
136-
func CreateAccessToken(user models.User, roles, scopes []string, hostName, nonce string) (string, int64, error) {
139+
func CreateAccessToken(user models.User, roles, scopes []string, hostName, nonce, provider string) (string, int64, error) {
137140
expireTime, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyAccessTokenExpiryTime)
138141
if err != nil {
139142
return "", 0, err
@@ -159,6 +162,7 @@ func CreateAccessToken(user models.User, roles, scopes []string, hostName, nonce
159162
"token_type": constants.TokenTypeAccessToken,
160163
"scope": scopes,
161164
"roles": roles,
165+
"provider": provider,
162166
}
163167

164168
token, err := SignJWTToken(customClaims)
@@ -278,7 +282,12 @@ func ValidateBrowserSession(gc *gin.Context, encryptedSession string) (*SessionD
278282
return nil, err
279283
}
280284

281-
token, err := memorystore.Provider.GetUserSession(res.Subject, constants.TokenTypeSessionToken+"_"+res.Nonce)
285+
sessionStoreKey := res.Subject
286+
if res.Provider != "" {
287+
sessionStoreKey = res.Provider + ":" + res.Subject
288+
}
289+
290+
token, err := memorystore.Provider.GetUserSession(sessionStoreKey, constants.TokenTypeSessionToken+"_"+res.Nonce)
282291
if token == "" || err != nil {
283292
log.Debug("invalid browser session:", err)
284293
return nil, fmt.Errorf(`unauthorized`)
@@ -297,7 +306,7 @@ func ValidateBrowserSession(gc *gin.Context, encryptedSession string) (*SessionD
297306

298307
// CreateIDToken util to create JWT token, based on
299308
// user information, roles config and CUSTOM_ACCESS_TOKEN_SCRIPT
300-
func CreateIDToken(user models.User, roles []string, hostname, nonce string) (string, int64, error) {
309+
func CreateIDToken(user models.User, roles []string, hostname, nonce, provider string) (string, int64, error) {
301310
expireTime, err := memorystore.Provider.GetStringStoreEnvVariable(constants.EnvKeyAccessTokenExpiryTime)
302311
if err != nil {
303312
return "", 0, err
@@ -332,6 +341,7 @@ func CreateIDToken(user models.User, roles []string, hostname, nonce string) (st
332341
"iat": time.Now().Unix(),
333342
"token_type": constants.TokenTypeIdentityToken,
334343
"allowed_roles": strings.Split(user.Roles, ","),
344+
"provider": provider,
335345
claimKey: roles,
336346
}
337347

0 commit comments

Comments
 (0)