@@ -62,7 +62,6 @@ type Config struct {
62
62
AuthenticationConfig * apiserver.AuthenticationConfiguration
63
63
AuthenticationConfigData string
64
64
OIDCSigningAlgs []string
65
- ServiceAccountKeyFiles []string
66
65
ServiceAccountLookup bool
67
66
ServiceAccountIssuers []string
68
67
APIAudiences authenticator.Audiences
@@ -79,7 +78,9 @@ type Config struct {
79
78
80
79
RequestHeaderConfig * authenticatorfactory.RequestHeaderConfig
81
80
82
- // TODO, this is the only non-serializable part of the entire config. Factor it out into a clientconfig
81
+ // ServiceAccountPublicKeysGetter returns public keys for verifying service account tokens.
82
+ ServiceAccountPublicKeysGetter serviceaccount.PublicKeysGetter
83
+ // ServiceAccountTokenGetter fetches API objects used to verify bound objects in service account token claims.
83
84
ServiceAccountTokenGetter serviceaccount.ServiceAccountTokenGetter
84
85
SecretsWriter typedv1core.SecretsGetter
85
86
BootstrapTokenAuthenticator authenticator.Token
@@ -127,15 +128,15 @@ func (config Config) New(serverLifecycle context.Context) (authenticator.Request
127
128
}
128
129
tokenAuthenticators = append (tokenAuthenticators , authenticator .WrapAudienceAgnosticToken (config .APIAudiences , tokenAuth ))
129
130
}
130
- if len ( config .ServiceAccountKeyFiles ) > 0 {
131
- serviceAccountAuth , err := newLegacyServiceAccountAuthenticator (config .ServiceAccountKeyFiles , config .ServiceAccountLookup , config .APIAudiences , config .ServiceAccountTokenGetter , config .SecretsWriter )
131
+ if config .ServiceAccountPublicKeysGetter != nil {
132
+ serviceAccountAuth , err := newLegacyServiceAccountAuthenticator (config .ServiceAccountPublicKeysGetter , config .ServiceAccountLookup , config .APIAudiences , config .ServiceAccountTokenGetter , config .SecretsWriter )
132
133
if err != nil {
133
134
return nil , nil , nil , nil , err
134
135
}
135
136
tokenAuthenticators = append (tokenAuthenticators , serviceAccountAuth )
136
137
}
137
138
if len (config .ServiceAccountIssuers ) > 0 {
138
- serviceAccountAuth , err := newServiceAccountAuthenticator (config .ServiceAccountIssuers , config .ServiceAccountKeyFiles , config .APIAudiences , config .ServiceAccountTokenGetter )
139
+ serviceAccountAuth , err := newServiceAccountAuthenticator (config .ServiceAccountIssuers , config .ServiceAccountPublicKeysGetter , config .APIAudiences , config .ServiceAccountTokenGetter )
139
140
if err != nil {
140
141
return nil , nil , nil , nil , err
141
142
}
@@ -338,36 +339,25 @@ func newAuthenticatorFromTokenFile(tokenAuthFile string) (authenticator.Token, e
338
339
}
339
340
340
341
// newLegacyServiceAccountAuthenticator returns an authenticator.Token or an error
341
- func newLegacyServiceAccountAuthenticator (keyfiles []string , lookup bool , apiAudiences authenticator.Audiences , serviceAccountGetter serviceaccount.ServiceAccountTokenGetter , secretsWriter typedv1core.SecretsGetter ) (authenticator.Token , error ) {
342
- allPublicKeys := []interface {}{}
343
- for _ , keyfile := range keyfiles {
344
- publicKeys , err := keyutil .PublicKeysFromFile (keyfile )
345
- if err != nil {
346
- return nil , err
347
- }
348
- allPublicKeys = append (allPublicKeys , publicKeys ... )
342
+ func newLegacyServiceAccountAuthenticator (publicKeysGetter serviceaccount.PublicKeysGetter , lookup bool , apiAudiences authenticator.Audiences , serviceAccountGetter serviceaccount.ServiceAccountTokenGetter , secretsWriter typedv1core.SecretsGetter ) (authenticator.Token , error ) {
343
+ if publicKeysGetter == nil {
344
+ return nil , fmt .Errorf ("no public key getter provided" )
349
345
}
350
346
validator , err := serviceaccount .NewLegacyValidator (lookup , serviceAccountGetter , secretsWriter )
351
347
if err != nil {
352
348
return nil , fmt .Errorf ("while creating legacy validator, err: %w" , err )
353
349
}
354
350
355
- tokenAuthenticator := serviceaccount .JWTTokenAuthenticator ([]string {serviceaccount .LegacyIssuer }, allPublicKeys , apiAudiences , validator )
351
+ tokenAuthenticator := serviceaccount .JWTTokenAuthenticator ([]string {serviceaccount .LegacyIssuer }, publicKeysGetter , apiAudiences , validator )
356
352
return tokenAuthenticator , nil
357
353
}
358
354
359
355
// newServiceAccountAuthenticator returns an authenticator.Token or an error
360
- func newServiceAccountAuthenticator (issuers []string , keyfiles []string , apiAudiences authenticator.Audiences , serviceAccountGetter serviceaccount.ServiceAccountTokenGetter ) (authenticator.Token , error ) {
361
- allPublicKeys := []interface {}{}
362
- for _ , keyfile := range keyfiles {
363
- publicKeys , err := keyutil .PublicKeysFromFile (keyfile )
364
- if err != nil {
365
- return nil , err
366
- }
367
- allPublicKeys = append (allPublicKeys , publicKeys ... )
356
+ func newServiceAccountAuthenticator (issuers []string , publicKeysGetter serviceaccount.PublicKeysGetter , apiAudiences authenticator.Audiences , serviceAccountGetter serviceaccount.ServiceAccountTokenGetter ) (authenticator.Token , error ) {
357
+ if publicKeysGetter == nil {
358
+ return nil , fmt .Errorf ("no public key getter provided" )
368
359
}
369
-
370
- tokenAuthenticator := serviceaccount .JWTTokenAuthenticator (issuers , allPublicKeys , apiAudiences , serviceaccount .NewValidator (serviceAccountGetter ))
360
+ tokenAuthenticator := serviceaccount .JWTTokenAuthenticator (issuers , publicKeysGetter , apiAudiences , serviceaccount .NewValidator (serviceAccountGetter ))
371
361
return tokenAuthenticator , nil
372
362
}
373
363
0 commit comments