auth

package
v0.72.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 6, 2026 License: BSD-3-Clause, AGPL-3.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrHeaderAuthFailed = errors.New("header authentication failed")

ErrHeaderAuthFailed indicates that the header was present but the credential did not validate. Callers should return 401 instead of falling through to other auth schemes.

Functions

func WithTunnelLookup added in v0.72.0

func WithTunnelLookup(ctx context.Context, lookup TunnelLookupFunc) context.Context

WithTunnelLookup attaches a per-account peerstore lookup function to the request context. The auth middleware calls this lookup before hitting management's ValidateTunnelPeer to short-circuit unknown IPs and to skip the RPC for already-cached identities.

Types

type DomainConfig

type DomainConfig struct {
	Schemes           []Scheme
	SessionPublicKey  ed25519.PublicKey
	SessionExpiration time.Duration
	AccountID         types.AccountID
	ServiceID         types.ServiceID
	IPRestrictions    *restrict.Filter
	// Private routes the domain through ValidateTunnelPeer; failure → 403.
	Private bool
}

DomainConfig holds the authentication and restriction settings for a protected domain.

type Header struct {
	// contains filtered or unexported fields
}

Header implements header-based authentication. The proxy checks for the configured header in each request and validates its value via gRPC.

func NewHeader added in v0.67.0

func NewHeader(client authenticator, id types.ServiceID, accountId types.AccountID, headerName string) Header

NewHeader creates a Header authentication scheme for the given header name.

func (Header) Authenticate added in v0.67.0

func (h Header) Authenticate(r *http.Request) (string, string, error)

Authenticate checks for the configured header in the request. If absent, returns empty (unauthenticated). If present, validates via gRPC.

func (Header) Type added in v0.67.0

func (Header) Type() auth.Method

Type returns auth.MethodHeader.

type Middleware

type Middleware struct {
	// contains filtered or unexported fields
}

Middleware applies per-domain authentication and IP restriction checks.

func NewMiddleware

func NewMiddleware(logger *log.Logger, sessionValidator SessionValidator, geo restrict.GeoResolver) *Middleware

NewMiddleware creates a new authentication middleware. The sessionValidator is optional; if nil, OIDC session tokens are validated locally without group access checks.

func (*Middleware) AddDomain

func (mw *Middleware) AddDomain(domain string, schemes []Scheme, publicKeyB64 string, expiration time.Duration, accountID types.AccountID, serviceID types.ServiceID, ipRestrictions *restrict.Filter, private bool) error

AddDomain registers authentication schemes for the given domain. With schemes a valid session public key is required. private=true forces ValidateTunnelPeer enforcement (403 on failure) regardless of the schemes list.

func (*Middleware) Protect

func (mw *Middleware) Protect(next http.Handler) http.Handler

Protect wraps next with per-domain authentication and IP restriction checks. Requests whose Host is not registered pass through unchanged.

func (*Middleware) RemoveDomain

func (mw *Middleware) RemoveDomain(domain string)

RemoveDomain unregisters authentication for the given domain.

type OIDC

type OIDC struct {
	// contains filtered or unexported fields
}

func NewOIDC

func NewOIDC(client urlGenerator, id types.ServiceID, accountId types.AccountID, forwardedProto string) OIDC

NewOIDC creates a new OIDC authentication scheme

func (OIDC) Authenticate

func (o OIDC) Authenticate(r *http.Request) (string, string, error)

Authenticate checks for an OIDC session token or obtains the OIDC redirect URL.

func (OIDC) Type

func (OIDC) Type() auth.Method

type Password

type Password struct {
	// contains filtered or unexported fields
}

func NewPassword

func NewPassword(client authenticator, id types.ServiceID, accountId types.AccountID) Password

func (Password) Authenticate

func (p Password) Authenticate(r *http.Request) (string, string, error)

Authenticate attempts to authenticate the request using a form value passed in the request. If authentication fails, the required HTTP form ID is returned so that it can be injected into a request from the UI so that authentication may be successful.

func (Password) Type

func (Password) Type() auth.Method

type PeerIdentity added in v0.72.0

type PeerIdentity struct {
	PubKey   string
	TunnelIP netip.Addr
	FQDN     string

	// V2 fields (zero in V1).
	UserID string
	Email  string
	Groups []string
}

PeerIdentity describes the locally-known facts about a peer reachable on the proxy's per-account WireGuard listener. Phase 3 fills PubKey, TunnelIP and FQDN from the embedded client's peerstore. UserID, Email and Groups stay zero in V1 — full identity still travels through ValidateTunnelPeer. Phase V2 will populate them once RemotePeerConfig carries user identity.

type Pin

type Pin struct {
	// contains filtered or unexported fields
}

func NewPin

func NewPin(client authenticator, id types.ServiceID, accountId types.AccountID) Pin

func (Pin) Authenticate

func (p Pin) Authenticate(r *http.Request) (string, string, error)

Authenticate attempts to authenticate the request using a form value passed in the request. If authentication fails, the required HTTP form ID is returned so that it can be injected into a request from the UI so that authentication may be successful.

func (Pin) Type

func (Pin) Type() auth.Method

type Scheme

type Scheme interface {
	Type() auth.Method
	// Authenticate checks the request and determines whether it represents
	// an authenticated user. An empty token indicates an unauthenticated
	// request; optionally, promptData may be returned for the login UI.
	// An error indicates an infrastructure failure (e.g. gRPC unavailable).
	Authenticate(*http.Request) (token string, promptData string, err error)
}

Scheme defines an authentication mechanism for a domain.

type SessionValidator

type SessionValidator interface {
	ValidateSession(ctx context.Context, in *proto.ValidateSessionRequest, opts ...grpc.CallOption) (*proto.ValidateSessionResponse, error)
	ValidateTunnelPeer(ctx context.Context, in *proto.ValidateTunnelPeerRequest, opts ...grpc.CallOption) (*proto.ValidateTunnelPeerResponse, error)
}

SessionValidator validates session tokens and checks user access permissions.

type TunnelLookupFunc added in v0.72.0

type TunnelLookupFunc func(ip netip.Addr) (PeerIdentity, bool)

TunnelLookupFunc resolves a tunnel IP to a peer identity using locally available peerstore data. ok=false means the IP is not in the calling account's roster.

func TunnelLookupFromContext added in v0.72.0

func TunnelLookupFromContext(ctx context.Context) TunnelLookupFunc

TunnelLookupFromContext returns the peerstore lookup attached to ctx, or nil when the request did not arrive on a per-account listener.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL