@@ -41,19 +41,23 @@ var (
4141)
4242
4343type ClaimSet struct {
44- Iss string `json:"iss"`
45- Aud string `json:"aud"`
46- Sub string `json:"sub"`
47- Iat int64 `json:"iat"`
48- Exp int64 `json:"exp"`
44+ Iss string `json:"iss"`
45+ Aud string `json:"aud"`
46+ Sub string `json:"sub"`
47+ Iat int64 `json:"iat"`
48+ Exp int64 `json:"exp"`
49+ Name string `json:"name,omitempty"`
50+ Email string `json:"email,omitempty"`
51+ PreferredUsername string `json:"preferred_username,omitempty"`
52+ Groups []string `json:"groups,omitempty"`
4953}
5054
5155type UserinfoResponse struct {
5256 Sub string `json:"sub"`
5357 Name string `json:"name"`
5458 Email string `json:"email"`
5559 PreferredUsername string `json:"preferred_username"`
56- Groups []string `json:"groups"`
60+ Groups []string `json:"groups,omitempty "`
5761 UpdatedAt int64 `json:"updated_at"`
5862}
5963
@@ -349,7 +353,7 @@ func (service *OIDCService) GetCodeEntry(c *gin.Context, codeHash string) (repos
349353 return oidcCode , nil
350354}
351355
352- func (service * OIDCService ) generateIDToken (client config.OIDCClientConfig , sub string ) (string , error ) {
356+ func (service * OIDCService ) generateIDToken (client config.OIDCClientConfig , user repository. OidcUserinfo , scope string ) (string , error ) {
353357 createdAt := time .Now ().Unix ()
354358 expiresAt := time .Now ().Add (time .Duration (service .config .SessionExpiry ) * time .Second ).Unix ()
355359
@@ -367,12 +371,18 @@ func (service *OIDCService) generateIDToken(client config.OIDCClientConfig, sub
367371 return "" , err
368372 }
369373
374+ userInfo := service .CompileUserinfo (user , scope )
375+
370376 claims := ClaimSet {
371- Iss : service .issuer ,
372- Aud : client .ClientID ,
373- Sub : sub ,
374- Iat : createdAt ,
375- Exp : expiresAt ,
377+ Iss : service .issuer ,
378+ Aud : client .ClientID ,
379+ Sub : user .Sub ,
380+ Iat : createdAt ,
381+ Exp : expiresAt ,
382+ Name : userInfo .Name ,
383+ Email : userInfo .Email ,
384+ PreferredUsername : userInfo .PreferredUsername ,
385+ Groups : userInfo .Groups ,
376386 }
377387
378388 payload , err := json .Marshal (claims )
@@ -397,7 +407,13 @@ func (service *OIDCService) generateIDToken(client config.OIDCClientConfig, sub
397407}
398408
399409func (service * OIDCService ) GenerateAccessToken (c * gin.Context , client config.OIDCClientConfig , sub string , scope string ) (TokenResponse , error ) {
400- idToken , err := service .generateIDToken (client , sub )
410+ user , err := service .GetUserinfo (c , sub )
411+
412+ if err != nil {
413+ return TokenResponse {}, err
414+ }
415+
416+ idToken , err := service .generateIDToken (client , user , scope )
401417
402418 if err != nil {
403419 return TokenResponse {}, err
@@ -456,9 +472,15 @@ func (service *OIDCService) RefreshAccessToken(c *gin.Context, refreshToken stri
456472 return TokenResponse {}, ErrInvalidClient
457473 }
458474
475+ user , err := service .GetUserinfo (c , entry .Sub )
476+
477+ if err != nil {
478+ return TokenResponse {}, err
479+ }
480+
459481 idToken , err := service .generateIDToken (config.OIDCClientConfig {
460482 ClientID : entry .ClientID ,
461- }, entry .Sub )
483+ }, user , entry .Scope )
462484
463485 if err != nil {
464486 return TokenResponse {}, err
0 commit comments