Skip to content

Commit 2f211d7

Browse files
feat: add configurable JWT issuer for local auth development (#4388)
* feat: add configurable JWT issuer for local auth development * fix: set jwt_issuer default during config loading * chore: build verify url from jwt issuer * chore: build redirect uri from issuer url --------- Co-authored-by: Qiao Han <[email protected]>
1 parent 8f3bf1c commit 2f211d7

File tree

4 files changed

+13
-6
lines changed

4 files changed

+13
-6
lines changed

internal/start/start.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ EOF
482482
"GOTRUE_JWT_DEFAULT_GROUP_NAME=authenticated",
483483
fmt.Sprintf("GOTRUE_JWT_EXP=%v", utils.Config.Auth.JwtExpiry),
484484
"GOTRUE_JWT_SECRET=" + utils.Config.Auth.JwtSecret.Value,
485-
"GOTRUE_JWT_ISSUER=" + utils.GetApiUrl("/auth/v1"),
485+
"GOTRUE_JWT_ISSUER=" + utils.Config.Auth.JwtIssuer,
486486

487487
fmt.Sprintf("GOTRUE_EXTERNAL_EMAIL_ENABLED=%v", utils.Config.Auth.Email.EnableSignup),
488488
fmt.Sprintf("GOTRUE_MAILER_SECURE_EMAIL_CHANGE_ENABLED=%v", utils.Config.Auth.Email.DoubleConfirmChanges),
@@ -494,10 +494,10 @@ EOF
494494

495495
fmt.Sprintf("GOTRUE_SMTP_MAX_FREQUENCY=%v", utils.Config.Auth.Email.MaxFrequency),
496496

497-
"GOTRUE_MAILER_URLPATHS_INVITE=" + utils.GetApiUrl("/auth/v1/verify"),
498-
"GOTRUE_MAILER_URLPATHS_CONFIRMATION=" + utils.GetApiUrl("/auth/v1/verify"),
499-
"GOTRUE_MAILER_URLPATHS_RECOVERY=" + utils.GetApiUrl("/auth/v1/verify"),
500-
"GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE=" + utils.GetApiUrl("/auth/v1/verify"),
497+
fmt.Sprintf("GOTRUE_MAILER_URLPATHS_INVITE=%s/verify", utils.Config.Auth.JwtIssuer),
498+
fmt.Sprintf("GOTRUE_MAILER_URLPATHS_CONFIRMATION=%s/verify", utils.Config.Auth.JwtIssuer),
499+
fmt.Sprintf("GOTRUE_MAILER_URLPATHS_RECOVERY=%s/verify", utils.Config.Auth.JwtIssuer),
500+
fmt.Sprintf("GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE=%s/verify", utils.Config.Auth.JwtIssuer),
501501
"GOTRUE_RATE_LIMIT_EMAIL_SENT=360000",
502502

503503
fmt.Sprintf("GOTRUE_EXTERNAL_PHONE_ENABLED=%v", utils.Config.Auth.Sms.EnableSignup),
@@ -699,7 +699,7 @@ EOF
699699

700700
redirectUri := config.RedirectUri
701701
if redirectUri == "" {
702-
redirectUri = utils.GetApiUrl("/auth/v1/callback")
702+
redirectUri = utils.Config.Auth.JwtIssuer + "/callback"
703703
}
704704
env = append(env, fmt.Sprintf("GOTRUE_EXTERNAL_%s_REDIRECT_URI=%s", strings.ToUpper(name), redirectUri))
705705

pkg/config/auth.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ type (
152152
SiteUrl string `toml:"site_url"`
153153
AdditionalRedirectUrls []string `toml:"additional_redirect_urls"`
154154
JwtExpiry uint `toml:"jwt_expiry"`
155+
JwtIssuer string `toml:"jwt_issuer"`
155156
EnableRefreshTokenRotation bool `toml:"enable_refresh_token_rotation"`
156157
RefreshTokenReuseInterval uint `toml:"refresh_token_reuse_interval"`
157158
EnableManualLinking bool `toml:"enable_manual_linking"`

pkg/config/config.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,10 @@ func (c *config) Load(path string, fsys fs.FS, overrides ...ConfigEditor) error
583583
}
584584
c.Api.ExternalUrl = apiUrl.String()
585585
}
586+
// Set default JWT issuer if not configured
587+
if len(c.Auth.JwtIssuer) == 0 {
588+
c.Auth.JwtIssuer = c.Api.ExternalUrl + "/auth/v1"
589+
}
586590
// Update image versions
587591
switch c.Db.MajorVersion {
588592
case 13:

pkg/config/templates/config.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ site_url = "http://127.0.0.1:3000"
125125
additional_redirect_urls = ["https://127.0.0.1:3000"]
126126
# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week).
127127
jwt_expiry = 3600
128+
# JWT issuer URL. If not set, defaults to the local API URL (http://127.0.0.1:<port>/auth/v1).
129+
# jwt_issuer = ""
128130
# Path to JWT signing key. DO NOT commit your signing keys file to git.
129131
# signing_keys_path = "./signing_keys.json"
130132
# If disabled, the refresh token will never expire.

0 commit comments

Comments
 (0)