@@ -96,7 +96,8 @@ type defaultIdentityProviderResponseParser struct{}
96
96
97
97
// ParseResponse parses the response from the identity provider and extracts the token.
98
98
// It takes an IdentityProviderResponse as an argument and returns a Token and an error if any.
99
- // The IdentityProviderResponse contains the raw token and the expiration time.
99
+ // The raw token is extracted based on the IdentityProviderResponse Type and then
100
+ // is parsed as a JWT token to extract the claims.
100
101
func (* defaultIdentityProviderResponseParser ) ParseResponse (response shared.IdentityProviderResponse ) (* token.Token , error ) {
101
102
if response == nil {
102
103
return nil , fmt .Errorf ("identity provider response cannot be nil" )
@@ -113,82 +114,51 @@ func (*defaultIdentityProviderResponseParser) ParseResponse(response shared.Iden
113
114
return nil , fmt .Errorf ("failed to get auth result: %w" , err )
114
115
}
115
116
116
- claims := struct {
117
- jwt.RegisteredClaims
118
- Oid string `json:"oid,omitempty"`
119
- }{}
120
-
121
- // Parse the token to extract claims, but note that signature verification
122
- // should be handled by the identity provider
123
- _ , _ , err = jwt .NewParser ().ParseUnverified (authResult .AccessToken , & claims )
124
- if err != nil {
125
- return nil , fmt .Errorf ("failed to parse JWT token: %w" , err )
126
- }
127
-
128
- if claims .Oid == "" {
129
- return nil , fmt .Errorf ("auth result OID is empty" )
130
- }
131
-
132
- if claims .ExpiresAt .IsZero () {
133
- return nil , fmt .Errorf ("auth result expiration time is not set" )
134
- }
135
-
117
+ expiresOn = authResult .ExpiresOn .UTC ()
136
118
rawToken = authResult .AccessToken
137
- username = claims .Oid
138
- password = rawToken
139
- expiresOn = claims .ExpiresAt .UTC ()
140
-
141
- case shared .ResponseTypeRawToken , shared .ResponseTypeAccessToken :
142
- var tokenStr string
143
- var err error
144
- if response .Type () == shared .ResponseTypeRawToken {
145
- tokenStr , err = response .(shared.RawTokenIDPResponse ).RawToken ()
146
- if err != nil {
147
- return nil , fmt .Errorf ("failed to get raw token: %w" , err )
148
- }
149
- }
150
- if response .Type () == shared .ResponseTypeAccessToken {
151
- accessToken , err := response .(shared.AccessTokenIDPResponse ).AccessToken ()
152
- if err != nil {
153
- return nil , fmt .Errorf ("failed to get access token: %w" , err )
154
- }
155
- if accessToken .Token == "" {
156
- return nil , fmt .Errorf ("access token value is empty" )
157
- }
158
- tokenStr = accessToken .Token
159
- expiresOn = accessToken .ExpiresOn .UTC ()
160
- }
161
-
162
- if tokenStr == "" {
163
- return nil , fmt .Errorf ("raw token is empty" )
119
+ case shared .ResponseTypeAccessToken :
120
+ accessToken , err := response .(shared.AccessTokenIDPResponse ).AccessToken ()
121
+ if err != nil {
122
+ return nil , fmt .Errorf ("failed to get access token: %w" , err )
164
123
}
165
124
166
- claims := struct {
167
- jwt.RegisteredClaims
168
- Oid string `json:"oid,omitempty"`
169
- }{}
170
-
171
- // Parse the token to extract claims, but note that signature verification
172
- // should be handled by the identity provider
173
- _ , _ , err = jwt .NewParser ().ParseUnverified (tokenStr , & claims )
125
+ rawToken = accessToken .Token
126
+ expiresOn = accessToken .ExpiresOn .UTC ()
127
+ case shared .ResponseTypeRawToken :
128
+ tokenStr , err := response .(shared.RawTokenIDPResponse ).RawToken ()
174
129
if err != nil {
175
- return nil , fmt .Errorf ("failed to parse JWT token: %w" , err )
130
+ return nil , fmt .Errorf ("failed to get raw token: %w" , err )
176
131
}
132
+ rawToken = tokenStr
133
+ default :
134
+ return nil , fmt .Errorf ("unsupported response type: %s" , response .Type ())
135
+ }
177
136
178
- if claims . Oid == "" {
179
- return nil , fmt .Errorf ("JWT token does not contain OID claim " )
180
- }
137
+ if rawToken == "" {
138
+ return nil , fmt .Errorf ("raw token is empty " )
139
+ }
181
140
182
- rawToken = tokenStr
183
- username = claims .Oid
184
- password = rawToken
141
+ // Parse JWT
142
+ claims := struct {
143
+ jwt.RegisteredClaims
144
+ Oid string `json:"oid,omitempty"`
145
+ }{}
146
+
147
+ // Parse the token to extract claims, but note that signature verification
148
+ // should be handled by the identity provider
149
+ _ , _ , err := jwt .NewParser ().ParseUnverified (rawToken , & claims )
150
+ if err != nil {
151
+ return nil , fmt .Errorf ("failed to parse JWT token: %w" , err )
152
+ }
185
153
186
- if expiresOn . IsZero () && claims .ExpiresAt != nil {
187
- expiresOn = claims . ExpiresAt . UTC ( )
188
- }
154
+ if claims .Oid == "" {
155
+ return nil , fmt . Errorf ( "JWT token does not contain OID claim" )
156
+ }
189
157
190
- default :
191
- return nil , fmt .Errorf ("unsupported response type: %s" , response .Type ())
158
+ username = claims .Oid
159
+ password = rawToken
160
+ if expiresOn .IsZero () && claims .ExpiresAt != nil {
161
+ expiresOn = claims .ExpiresAt .UTC ()
192
162
}
193
163
194
164
if expiresOn .IsZero () {
0 commit comments