fix: UI should re-trigger SSO login if SSO JWT token expires (#2891)

This commit is contained in:
Alexander Matyushentsev
2019-12-17 18:31:30 -08:00
committed by GitHub
parent aea2a51eeb
commit f253fcfa86
3 changed files with 11 additions and 8 deletions

View File

@@ -1,6 +1,6 @@
controller: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true go run ./cmd/argocd-application-controller/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081}"
api-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true go run ./cmd/argocd-server/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --disable-auth=${ARGOCD_E2E_DISABLE_AUTH:-'true'} --insecure --dex-server http://localhost:${ARGOCD_E2E_DEX_PORT:-5556} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081} --port ${ARGOCD_E2E_APISERVER_PORT:-8080} --staticassets ui/dist/app"
dex: sh -c "go run ./cmd/argocd-util/main.go gendexcfg -o `pwd`/dist/dex.yaml && docker run --rm -p ${ARGOCD_E2E_DEX_PORT:-5556}:${ARGOCD_E2E_DEX_PORT:-5556} -v `pwd`/dist/dex.yaml:/dex.yaml quay.io/dexidp/dex:v2.14.0 serve /dex.yaml"
dex: sh -c "go run github.com/argoproj/argo-cd/cmd/argocd-util gendexcfg -o `pwd`/dist/dex.yaml && docker run --rm -p ${ARGOCD_E2E_DEX_PORT:-5556}:${ARGOCD_E2E_DEX_PORT:-5556} -v `pwd`/dist/dex.yaml:/dex.yaml quay.io/dexidp/dex:v2.14.0 serve /dex.yaml"
redis: docker run --rm --name argocd-redis -i -p ${ARGOCD_E2E_REDIS_PORT:-6379}:${ARGOCD_E2E_REDIS_PORT:-6379} redis:5.0.3-alpine --save "" --appendonly no --port ${ARGOCD_E2E_REDIS_PORT:-6379}
repo-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true go run ./cmd/argocd-repo-server/main.go --loglevel debug --port ${ARGOCD_E2E_REPOSERVER_PORT:-8081} --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379}"
ui: sh -c 'cd ui && ${ARGOCD_E2E_YARN_CMD:-yarn} start'

View File

@@ -738,7 +738,13 @@ func (a *ArgoCDServer) Authenticate(ctx context.Context) (context.Context, error
if a.DisableAuth {
return ctx, nil
}
if claims, claimsErr := a.getClaims(ctx); claimsErr != nil {
claims, claimsErr := a.getClaims(ctx)
if claims != nil {
// Add claims to the context to inspect for RBAC
ctx = context.WithValue(ctx, "claims", claims)
}
if claimsErr != nil {
argoCDSettings, err := a.settingsMgr.GetSettings()
if err != nil {
return ctx, status.Errorf(codes.Internal, "unable to load settings: %v", err)
@@ -746,9 +752,6 @@ func (a *ArgoCDServer) Authenticate(ctx context.Context) (context.Context, error
if !argoCDSettings.AnonymousUserEnabled {
return ctx, claimsErr
}
} else {
// Add claims to the context to inspect for RBAC
ctx = context.WithValue(ctx, "claims", claims)
}
return ctx, nil
@@ -765,7 +768,7 @@ func (a *ArgoCDServer) getClaims(ctx context.Context) (jwt.Claims, error) {
}
claims, err := a.sessionMgr.VerifyToken(tokenString)
if err != nil {
return nil, status.Errorf(codes.Unauthenticated, "invalid session: %v", err)
return claims, status.Errorf(codes.Unauthenticated, "invalid session: %v", err)
}
return claims, nil
}

View File

@@ -170,11 +170,11 @@ func (mgr *SessionManager) VerifyToken(tokenString string) (jwt.Claims, error) {
// IDP signed token
prov, err := mgr.provider()
if err != nil {
return nil, err
return claims, err
}
idToken, err := prov.Verify(claims.Audience, tokenString)
if err != nil {
return nil, err
return claims, err
}
var claims jwt.MapClaims
err = idToken.Claims(&claims)