Skip to content

Commit

Permalink
AuthN: Fix signout redirect url (#87631)
Browse files Browse the repository at this point in the history
* Add missing return

* Use sign out redirect url from auth config if configured

* remove option from auth.jwt that is not used
  • Loading branch information
kalleep committed May 12, 2024
1 parent 3dab7e4 commit 0f3080e
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 8 deletions.
1 change: 0 additions & 1 deletion conf/defaults.ini
Original file line number Diff line number Diff line change
Expand Up @@ -875,7 +875,6 @@ auto_sign_up = false
url_login = false
allow_assign_grafana_admin = false
skip_org_role_sync = false
signout_redirect_url =

#################################### Auth LDAP ###########################
[auth.ldap]
Expand Down
1 change: 1 addition & 0 deletions pkg/api/login.go
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ func (hs *HTTPServer) Logout(c *contextmodel.ReqContext) {
if err != nil {
hs.log.Error("Failed perform proper logout", "error", err)
c.Redirect(hs.Cfg.AppSubURL + "/login")
return
}

_, id := c.SignedInUser.GetNamespacedID()
Expand Down
13 changes: 7 additions & 6 deletions pkg/services/authn/authnimpl/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import (
"github.com/grafana/grafana/pkg/infra/tracing"
"github.com/grafana/grafana/pkg/infra/usagestats"
"github.com/grafana/grafana/pkg/services/auth"
"github.com/grafana/grafana/pkg/services/auth/identity"
"github.com/grafana/grafana/pkg/services/authn"
"github.com/grafana/grafana/pkg/services/authn/clients"
"github.com/grafana/grafana/pkg/services/user"
Expand Down Expand Up @@ -265,15 +264,17 @@ func (s *Service) Logout(ctx context.Context, user authn.Requester, sessionToken
defer span.End()

redirect := &authn.Redirect{URL: s.cfg.AppSubURL + "/login"}
if s.cfg.SignoutRedirectUrl != "" {
redirect.URL = s.cfg.SignoutRedirectUrl
}

namespace, id := user.GetNamespacedID()
if namespace != authn.NamespaceUser {
if !user.GetID().IsNamespace(authn.NamespaceUser) {
return redirect, nil
}

userID, err := identity.IntIdentifier(namespace, id)
id, err := user.GetID().ParseInt()
if err != nil {
s.log.FromContext(ctx).Debug("Invalid user id", "id", userID, "err", err)
s.log.FromContext(ctx).Debug("Invalid user id", "id", id, "err", err)
return redirect, nil
}

Expand Down Expand Up @@ -301,7 +302,7 @@ func (s *Service) Logout(ctx context.Context, user authn.Requester, sessionToken
}

Default:
if err = s.sessionService.RevokeToken(ctx, sessionToken, false); err != nil {
if err = s.sessionService.RevokeToken(ctx, sessionToken, false); err != nil && !errors.Is(err, auth.ErrUserTokenNotFound) {
return nil, err
}

Expand Down
15 changes: 14 additions & 1 deletion pkg/services/authn/authnimpl/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,8 @@ func TestService_Logout(t *testing.T) {
identity *authn.Identity
sessionToken *usertoken.UserToken

client authn.Client
client authn.Client
signoutRedirectURL string

expectedErr error
expectedTokenRevoked bool
Expand Down Expand Up @@ -441,6 +442,14 @@ func TestService_Logout(t *testing.T) {
client: &authntest.FakeClient{ExpectedName: "auth.client.azuread"},
expectedTokenRevoked: true,
},
{
desc: "should use signout redirect url if configured",
identity: &authn.Identity{ID: authn.NewNamespaceID(authn.NamespaceUser, 1), AuthenticatedBy: "azuread"},
expectedRedirect: &authn.Redirect{URL: "some-url"},
client: &authntest.FakeClient{ExpectedName: "auth.client.azuread"},
signoutRedirectURL: "some-url",
expectedTokenRevoked: true,
},
{
desc: "should redirect to client specific url",
identity: &authn.Identity{ID: authn.NewNamespaceID(authn.NamespaceUser, 1), AuthenticatedBy: "azuread"},
Expand Down Expand Up @@ -473,6 +482,10 @@ func TestService_Logout(t *testing.T) {
return nil
},
}

if tt.signoutRedirectURL != "" {
svc.cfg.SignoutRedirectUrl = tt.signoutRedirectURL
}
})

redirect, err := s.Logout(context.Background(), tt.identity, tt.sessionToken)
Expand Down

0 comments on commit 0f3080e

Please sign in to comment.