From a6bd2c73a01fe126429649f3538166b2dc50f4de Mon Sep 17 00:00:00 2001 From: bergquist Date: Fri, 1 Feb 2019 11:47:21 +0100 Subject: [PATCH] introduce samesite setting for login cookie ref #15067 --- conf/defaults.ini | 3 +++ conf/sample.ini | 3 +++ pkg/services/auth/auth_token.go | 1 + pkg/setting/setting.go | 16 ++++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/conf/defaults.ini b/conf/defaults.ini index 788112ae67e..d021d342fbf 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -113,6 +113,9 @@ cache_mode = private # Login cookie name cookie_name = grafana_session +# Login cookie same site setting. defaults to `lax`. can be set to "lax", "strict" and "none" +cookie_samesite = lax + # How many days an session can be unused before we inactivate it login_remember_days = 7 diff --git a/conf/sample.ini b/conf/sample.ini index 89880106345..ef677320686 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -109,6 +109,9 @@ log_queries = # Login cookie name ;cookie_name = grafana_session +# Login cookie same site setting. defaults to `lax`. can be set to "lax", "strict" and "none" +;cookie_samesite = lax + # How many days an session can be unused before we inactivate it ;login_remember_days = 7 diff --git a/pkg/services/auth/auth_token.go b/pkg/services/auth/auth_token.go index db4d9d18624..98687f2013d 100644 --- a/pkg/services/auth/auth_token.go +++ b/pkg/services/auth/auth_token.go @@ -96,6 +96,7 @@ func (s *UserAuthTokenServiceImpl) writeSessionCookie(ctx *models.ReqContext, va Path: setting.AppSubUrl + "/", Secure: s.Cfg.SecurityHTTPSCookies, MaxAge: maxAge, + SameSite: s.Cfg.LoginCookieSameSite, } http.SetCookie(ctx.Resp, &cookie) diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index cf486a228ab..c3c78d10fec 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -6,6 +6,7 @@ package setting import ( "bytes" "fmt" + "net/http" "net/url" "os" "path" @@ -227,6 +228,7 @@ type Cfg struct { LoginCookieMaxDays int LoginCookieRotation int LoginDeleteExpiredTokensAfterDays int + LoginCookieSameSite http.SameSite SecurityHTTPSCookies bool } @@ -557,6 +559,20 @@ func (cfg *Cfg) Load(args *CommandLineArgs) error { cfg.LoginCookieName = login.Key("cookie_name").MustString("grafana_session") cfg.LoginCookieMaxDays = login.Key("login_remember_days").MustInt(7) cfg.LoginDeleteExpiredTokensAfterDays = login.Key("delete_expired_token_after_days").MustInt(30) + + samesiteString := login.Key("cookie_samesite").MustString("lax") + validSameSiteValues := map[string]http.SameSite{ + "lax": http.SameSiteLaxMode, + "strict": http.SameSiteStrictMode, + "none": http.SameSiteDefaultMode, + } + + if samesite, ok := validSameSiteValues[samesiteString]; ok { + cfg.LoginCookieSameSite = samesite + } else { + cfg.LoginCookieSameSite = http.SameSiteLaxMode + } + cfg.LoginCookieRotation = login.Key("rotate_token_minutes").MustInt(10) if cfg.LoginCookieRotation < 2 { cfg.LoginCookieRotation = 2