Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions pkg/storage/chunk/client/azure/blob_storage_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,10 @@ func (b *BlobStorage) getServicePrincipalToken(authFunctions authFunctions) (*ad

if b.cfg.UseFederatedToken {
token, err := b.servicePrincipalTokenFromFederatedToken(resource, authFunctions.NewOAuthConfigFunc, authFunctions.NewServicePrincipalTokenFromFederatedTokenFunc)
if err != nil {
return nil, err
}

var customRefreshFunc adal.TokenRefresh = func(context context.Context, resource string) (*adal.Token, error) {
newToken, err := b.servicePrincipalTokenFromFederatedToken(resource, authFunctions.NewOAuthConfigFunc, authFunctions.NewServicePrincipalTokenFromFederatedTokenFunc)
if err != nil {
Expand Down
24 changes: 24 additions & 0 deletions pkg/storage/chunk/client/azure/blob_storage_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import (
"testing"
"time"

"github.com/pkg/errors"

"github.com/Azure/go-autorest/autorest/adal"
"github.com/Azure/go-autorest/autorest/azure"
"github.com/grafana/dskit/flagext"
Expand Down Expand Up @@ -80,6 +82,28 @@ func (suite *FederatedTokenTestSuite) TestGetServicePrincipalToken() {
require.True(suite.T(), suite.mockedServicePrincipalToken == token, "should return the mocked object")
}

func (suite *FederatedTokenTestSuite) Test_HandleNoServicePrincipalToken() {
newOAuthConfigFunc := func(activeDirectoryEndpoint, tenantID string) (*adal.OAuthConfig, error) {
require.Equal(suite.T(), azure.PublicCloud.ActiveDirectoryEndpoint, activeDirectoryEndpoint)
require.Equal(suite.T(), "myTenantId", tenantID)

_, err := adal.NewOAuthConfig(activeDirectoryEndpoint, tenantID)
require.NoError(suite.T(), err)

return suite.mockOAuthConfig, nil
}

servicePrincipalTokenFromFederatedTokenFunc := func(oauthConfig adal.OAuthConfig, clientID string, jwt string, resource string, callbacks ...adal.TokenRefreshCallback) (*adal.ServicePrincipalToken, error) {
return nil, errors.New("No token")
}

token, err := suite.config.getServicePrincipalToken(authFunctions{newOAuthConfigFunc, servicePrincipalTokenFromFederatedTokenFunc})

require.Error(suite.T(), err)
require.EqualError(suite.T(), err, "No token")
require.True(suite.T(), token == nil, "should return error if no token was retrieved")
}

func Test_Hedging(t *testing.T) {
for _, tc := range []struct {
name string
Expand Down