Quellcode durchsuchen

feat(cookie): use `SameSiteStrictMode` when not using OAuth2/OIDC

Julien Voisin vor 9 Monaten
Ursprung
Commit
135ce1d546
1 geänderte Dateien mit 16 neuen und 4 gelöschten Zeilen
  1. 16 4
      internal/http/cookie/cookie.go

+ 16 - 4
internal/http/cookie/cookie.go

@@ -18,20 +18,26 @@ const (
 
 // New creates a new cookie.
 func New(name, value string, isHTTPS bool, path string) *http.Cookie {
-	return &http.Cookie{
+	cookie := &http.Cookie{
 		Name:     name,
 		Value:    value,
 		Path:     basePath(path),
 		Secure:   isHTTPS,
 		HttpOnly: true,
 		Expires:  time.Now().Add(time.Duration(config.Opts.CleanupRemoveSessionsDays()) * 24 * time.Hour),
-		SameSite: http.SameSiteLaxMode,
+		SameSite: http.SameSiteStrictMode,
 	}
+
+	// OAuth doesn't work when cookies are in strict mode.
+	if config.Opts.OAuth2Provider() != "" {
+		cookie.SameSite = http.SameSiteLaxMode
+	}
+	return cookie
 }
 
 // Expired returns an expired cookie.
 func Expired(name string, isHTTPS bool, path string) *http.Cookie {
-	return &http.Cookie{
+	cookie := &http.Cookie{
 		Name:     name,
 		Value:    "",
 		Path:     basePath(path),
@@ -39,8 +45,14 @@ func Expired(name string, isHTTPS bool, path string) *http.Cookie {
 		HttpOnly: true,
 		MaxAge:   -1,
 		Expires:  time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC),
-		SameSite: http.SameSiteLaxMode,
+		SameSite: http.SameSiteStrictMode,
+	}
+
+	// OAuth doesn't work when cookies are in strict mode.
+	if config.Opts.OAuth2Provider() != "" {
+		cookie.SameSite = http.SameSiteLaxMode
 	}
+	return cookie
 }
 
 func basePath(path string) string {