From 52906770bb3e57b49c54a0767363561d32be3c4d Mon Sep 17 00:00:00 2001 From: Jian Qiu Date: Wed, 17 Jan 2024 00:27:49 +0800 Subject: [PATCH] fix: automatically refresh invalid admin token (#19272) Co-authored-by: Qiu Jian --- pkg/mcclient/auth/auth.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/mcclient/auth/auth.go b/pkg/mcclient/auth/auth.go index 6a141c63f1..a7a20a2e91 100644 --- a/pkg/mcclient/auth/auth.go +++ b/pkg/mcclient/auth/auth.go @@ -27,6 +27,7 @@ import ( "yunion.io/x/pkg/appctx" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/cache" + "yunion.io/x/pkg/util/httputils" "yunion.io/x/onecloud/pkg/apis/identity" "yunion.io/x/onecloud/pkg/cloudcommon/consts" @@ -212,10 +213,15 @@ func (a *authManager) verifyRequest(req http.Request, virtualHost bool) (mcclien func (a *authManager) verify(ctx context.Context, token string) (mcclient.TokenCredential, error) { if a.adminCredential == nil { + a.reAuth() return nil, errors.Wrap(httperrors.ErrInvalidCredential, "No valid admin token credential") } cred, err := a.tokenCacheVerify.Verify(ctx, a.client, a.adminCredential.GetTokenString(), token) if err != nil { + if httputils.ErrorCode(err) == 403 { + // adminCredential need to be refresh + a.reAuth() + } return nil, errors.Wrap(err, "tokenCacheVerify.Verify") } return cred, nil