@@ -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