Skip to content

Commit 6e55665

Browse files
committed
Use updated OIDC middleware
1 parent be810d7 commit 6e55665

File tree

3 files changed

+19
-164
lines changed

3 files changed

+19
-164
lines changed

cookie.go

Lines changed: 0 additions & 85 deletions
This file was deleted.

cookie_test.go

Lines changed: 0 additions & 60 deletions
This file was deleted.

main.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -336,15 +336,12 @@ func tsproxy(ctx context.Context) error {
336336
if upstream.OIDCIssuer != "" {
337337
baseURL := "https://" + strings.TrimSuffix(st.Self.DNSName, ".")
338338

339-
oidcm := &middleware.Handler{
340-
Issuer: upstream.OIDCIssuer,
341-
ClientID: upstream.OIDCClientID,
342-
ClientSecret: upstream.OIDCClientSecret,
343-
BaseURL: baseURL,
344-
RedirectURL: baseURL + "/.tsproxy/oidc-callback",
345-
SessionStore: &cookieAuthSession{},
346-
AdditionalScopes: []string{"profile"}, // make sure we have email etc.
339+
oidcm, err := middleware.NewFromDiscovery(ctx, nil, upstream.OIDCIssuer, upstream.OIDCClientID, upstream.OIDCClientSecret, baseURL+"/.tsproxy/oidc-callback")
340+
if err != nil {
341+
return fmt.Errorf("oidc: new middleware: %w", err)
347342
}
343+
oidcm.OAuth2Config.Scopes = append(oidcm.OAuth2Config.Scopes, "profile", "email")
344+
348345
mux.Handle("/", oidcm.Wrap(rp)) // fallback to authed path.
349346
} else if !slices.Contains(upstream.FunnelPublicPatterns, "/") {
350347
// no OIDC auth, no root pattern, default behaviour is to block.
@@ -418,18 +415,21 @@ func newReverseProxy(logger *slog.Logger, lc tailscaleLocalClient, url *url.URL,
418415
displayName := whois.UserProfile.DisplayName
419416

420417
if isFunnel {
421-
cl := middleware.ClaimsFromContext(r.Context())
422-
if cl != nil {
423-
email := cl.Extra["email"].(string)
424-
name := cl.Extra["name"].(string)
425-
if email == "" || name == "" {
426-
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
427-
logger.Error("oidc id token missing name or email", slog.String("email", email), slog.String("name", name))
428-
return
429-
}
430-
loginName = email
431-
displayName = name
418+
idt := middleware.IDJWTFromContext(r.Context())
419+
if idt == nil || !idt.HasStringClaim("name") || !idt.HasStringClaim("email") {
420+
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
421+
logger.Error("oidc id token missing name or email")
422+
return
423+
}
424+
email, eerr := idt.StringClaim("email")
425+
name, nerr := idt.StringClaim("name")
426+
if eerr != nil || nerr != nil {
427+
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
428+
logger.Error("oidc id token cannot unpack name or email", "eerr", eerr, "nerr", nerr)
429+
return
432430
}
431+
loginName = email
432+
displayName = name
433433
}
434434

435435
req := r.Clone(r.Context())

0 commit comments

Comments
 (0)