@@ -54,6 +54,7 @@ type ClaimSet struct {
5454 Sub string `json:"sub"`
5555 Iat int64 `json:"iat"`
5656 Exp int64 `json:"exp"`
57+ AuthTime int64 `json:"auth_time,omitempty"`
5758 Name string `json:"name,omitempty"`
5859 GivenName string `json:"given_name,omitempty"`
5960 FamilyName string `json:"family_name,omitempty"`
@@ -117,6 +118,7 @@ type AuthorizeRequest struct {
117118 Nonce string `form:"nonce" json:"nonce" url:"nonce"`
118119 CodeChallenge string `form:"code_challenge" json:"code_challenge" url:"code_challenge"`
119120 CodeChallengeMethod string `form:"code_challenge_method" json:"code_challenge_method" url:"code_challenge_method"`
121+ Prompt string `form:"prompt" json:"prompt" url:"prompt"`
120122}
121123
122124type AuthorizeCodeEntry struct {
@@ -127,6 +129,7 @@ type AuthorizeCodeEntry struct {
127129 Nonce string
128130 CodeChallenge string
129131 Userinfo UserinfoResponse
132+ AuthTime int64
130133}
131134
132135type UsedCodeEntry struct {
@@ -423,6 +426,7 @@ func (service *OIDCService) CreateCode(req AuthorizeRequest, userContext model.U
423426 ClientID : req .ClientID ,
424427 Nonce : req .Nonce ,
425428 Userinfo : service .userinfoFromContext (userContext , sub ),
429+ AuthTime : userContext .AuthTime ,
426430 }
427431
428432 if req .CodeChallenge != "" {
@@ -512,7 +516,7 @@ func (service *OIDCService) GetCodeEntry(codeHash string, clientId string) (*Aut
512516 return & entry , true
513517}
514518
515- func (service * OIDCService ) generateIDToken (client model.OIDCClientConfig , user UserinfoResponse , scope string , nonce string ) (string , error ) {
519+ func (service * OIDCService ) generateIDToken (client model.OIDCClientConfig , user UserinfoResponse , scope string , nonce string , auth_time int64 ) (string , error ) {
516520 createdAt := time .Now ().Unix ()
517521 expiresAt := time .Now ().Add (time .Duration (service .config .Auth .SessionExpiry ) * time .Second ).Unix ()
518522
@@ -549,6 +553,7 @@ func (service *OIDCService) generateIDToken(client model.OIDCClientConfig, user
549553 Sub : user .Sub ,
550554 Iat : createdAt ,
551555 Exp : expiresAt ,
556+ AuthTime : auth_time ,
552557 Name : userInfo .Name ,
553558 Email : userInfo .Email ,
554559 EmailVerified : userInfo .EmailVerified ,
@@ -578,8 +583,8 @@ func (service *OIDCService) generateIDToken(client model.OIDCClientConfig, user
578583 return token , nil
579584}
580585
581- func (service * OIDCService ) GenerateAccessToken (ctx context.Context , client model.OIDCClientConfig , codeEntry AuthorizeCodeEntry ) (* TokenResponse , error ) {
582- idToken , err := service .generateIDToken (client , codeEntry .Userinfo , codeEntry .Scope , codeEntry .Nonce )
586+ func (service * OIDCService ) GenerateAccessToken (ctx context.Context , client model.OIDCClientConfig , codeEntry AuthorizeCodeEntry , authTime int64 ) (* TokenResponse , error ) {
587+ idToken , err := service .generateIDToken (client , codeEntry .Userinfo , codeEntry .Scope , codeEntry .Nonce , authTime )
583588
584589 if err != nil {
585590 return nil , err
@@ -660,7 +665,7 @@ func (service *OIDCService) RefreshAccessToken(ctx context.Context, refreshToken
660665
661666 idToken , err := service .generateIDToken (model.OIDCClientConfig {
662667 ClientID : entry .ClientID ,
663- }, userInfo , entry .Scope , entry .Nonce )
668+ }, userInfo , entry .Scope , entry .Nonce , 0 ) // auth_time is not available during refresh, so we set it to 0
664669
665670 if err != nil {
666671 return nil , err
@@ -929,5 +934,6 @@ func (service *OIDCService) DecodeAuthorizeJWT(tokenString string) (*AuthorizeRe
929934 Nonce : get ("nonce" ),
930935 CodeChallenge : get ("code_challenge" ),
931936 CodeChallengeMethod : get ("code_challenge_method" ),
937+ Prompt : get ("prompt" ),
932938 }, nil
933939}
0 commit comments