Skip to content

Commit 0c78c1e

Browse files
committed
fix a bug where spn: prefix is unexpectedly added to kubeconfig apiserver-id setting
1 parent ff809a5 commit 0c78c1e

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

staging/src/k8s.io/client-go/plugin/pkg/client/auth/azure/azure.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,9 @@ func (ts *azureTokenSource) retrieveTokenFromCfg() (*azureToken, error) {
273273
if expiresOn == "" {
274274
return nil, fmt.Errorf("no expiresOn in cfg: %s", cfgExpiresOn)
275275
}
276+
tokenAudience := resourceID
276277
if ts.configMode == configModeDefault {
277-
resourceID = fmt.Sprintf("spn:%s", resourceID)
278+
tokenAudience = fmt.Sprintf("spn:%s", resourceID)
278279
}
279280

280281
return &azureToken{
@@ -284,7 +285,7 @@ func (ts *azureTokenSource) retrieveTokenFromCfg() (*azureToken, error) {
284285
ExpiresIn: json.Number(expiresIn),
285286
ExpiresOn: json.Number(expiresOn),
286287
NotBefore: json.Number(expiresOn),
287-
Resource: resourceID,
288+
Resource: tokenAudience,
288289
Type: tokenType,
289290
},
290291
environment: environment,

staging/src/k8s.io/client-go/plugin/pkg/client/auth/azure/azure_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package azure
1818

1919
import (
2020
"encoding/json"
21+
"fmt"
2122
"strconv"
2223
"strings"
2324
"sync"
@@ -170,6 +171,55 @@ func TestAzureTokenSource(t *testing.T) {
170171
expectedConfigModes := []string{"1", "0"}
171172

172173
for i, configMode := range configModes {
174+
t.Run(fmt.Sprintf("validate token from cfg with configMode %v", configMode), func(t *testing.T) {
175+
const (
176+
serverID = "fakeServerID"
177+
clientID = "fakeClientID"
178+
tenantID = "fakeTenantID"
179+
accessToken = "fakeToken"
180+
environment = "fakeEnvironment"
181+
refreshToken = "fakeToken"
182+
expiresIn = "foo"
183+
expiresOn = "foo"
184+
)
185+
cfg := map[string]string{
186+
cfgConfigMode: string(configMode),
187+
cfgApiserverID: serverID,
188+
cfgClientID: clientID,
189+
cfgTenantID: tenantID,
190+
cfgEnvironment: environment,
191+
cfgAccessToken: accessToken,
192+
cfgRefreshToken: refreshToken,
193+
cfgExpiresIn: expiresIn,
194+
cfgExpiresOn: expiresOn,
195+
}
196+
fakeSource := fakeTokenSource{}
197+
persiter := &fakePersister{cache: make(map[string]string)}
198+
tokenCache := newAzureTokenCache()
199+
tokenSource := newAzureTokenSource(&fakeSource, tokenCache, cfg, configMode, persiter)
200+
azTokenSource := tokenSource.(*azureTokenSource)
201+
token, err := azTokenSource.retrieveTokenFromCfg()
202+
if err != nil {
203+
t.Errorf("failed to retrieve the token form cfg: %s", err)
204+
}
205+
if token.apiserverID != serverID {
206+
t.Errorf("expecting token.apiserverID: %s, actual: %s", serverID, token.apiserverID)
207+
}
208+
if token.clientID != clientID {
209+
t.Errorf("expecting token.clientID: %s, actual: %s", clientID, token.clientID)
210+
}
211+
if token.tenantID != tenantID {
212+
t.Errorf("expecting token.tenantID: %s, actual: %s", tenantID, token.tenantID)
213+
}
214+
expectedAudience := serverID
215+
if configMode == configModeDefault {
216+
expectedAudience = fmt.Sprintf("spn:%s", serverID)
217+
}
218+
if token.token.Resource != expectedAudience {
219+
t.Errorf("expecting adal token.Resource: %s, actual: %s", expectedAudience, token.token.Resource)
220+
}
221+
})
222+
173223
t.Run("validate token against cache", func(t *testing.T) {
174224
fakeAccessToken := "fake token 1"
175225
fakeSource := fakeTokenSource{

0 commit comments

Comments
 (0)