authorization

package
v1.0.0-beta1 Latest Latest
Warning

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

Go to latest
Published: Oct 2, 2026 License: Apache-2.0 Imports: 37 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AuthorizationEvidenceSchema      = "bifroest.authorization-evidence/v1"
	AuthorizationEvidenceExtension   = "evidence-v1@bifroest.engity.org"
	BifroestDelegationCriticalOption = "bifroest-delegation@bifroest.engity.org"
	MaxAuthorizationEvidenceSize     = 4 * 1024
	MaxAuthorizationEvidenceHops     = 8
)

Variables

View Source
var (
	ErrNoSuchAuthorization = errors.New("no such authorization")
	// ErrUnusableAuthorizationToken marks persisted local token data that cannot
	// become restorable without changing that token or the running configuration.
	ErrUnusableAuthorizationToken = errors.New("unusable persisted authorization token")
)

Functions

func EncodeAuthorizationEvidence

func EncodeAuthorizationEvidence(evidence *AuthorizationEvidence) ([]byte, error)

func IsAgentForwardingAllowed added in v0.7.7

func IsAgentForwardingAllowed(auth Authorization) bool

func KindOf

func KindOf(auth Authorization) string

Types

type Authorization

type Authorization interface {
	IsAuthorized() bool
	EnvVars() sys.EnvVars
	Flow() configuration.FlowName
	Remote() net.Remote
	FindSession() session.Session
	FindSessionsPublicKey() ssh.PublicKey
	Dispose(context.Context) (bool, error)
}

func Forbidden

func Forbidden(remote net.Remote) Authorization

type AuthorizationEvidence

type AuthorizationEvidence struct {
	Schema string                      `json:"schema"`
	Origin AuthorizationEvidenceOrigin `json:"origin"`
	Hops   []AuthorizationEvidenceHop  `json:"hops"`
}

func AuthorizationEvidenceOf

func AuthorizationEvidenceOf(auth Authorization) *AuthorizationEvidence

func DecodeAuthorizationEvidence

func DecodeAuthorizationEvidence(raw []byte) (*AuthorizationEvidence, error)

func (*AuthorizationEvidence) Append

func (*AuthorizationEvidence) Clone

func (*AuthorizationEvidence) LastHop

func (*AuthorizationEvidence) Policy

func (*AuthorizationEvidence) Validate

func (this *AuthorizationEvidence) Validate() error

type AuthorizationEvidenceHop

type AuthorizationEvidenceHop struct {
	CaFingerprint          string    `json:"caFingerprint"`
	SubjectKeyFingerprint  string    `json:"subjectKeyFingerprint"`
	Serial                 uint64    `json:"serial"`
	KeyId                  string    `json:"keyId"`
	SessionId              string    `json:"sessionId"`
	Flow                   string    `json:"flow"`
	AuthorizationKind      string    `json:"authorizationKind"`
	Audience               string    `json:"audience,omitempty"`
	TargetUser             string    `json:"targetUser"`
	IssuedAt               time.Time `json:"issuedAt"`
	ValidAfter             time.Time `json:"validAfter"`
	ValidBefore            time.Time `json:"validBefore"`
	PtyAllowed             bool      `json:"ptyAllowed"`
	PortForwardingAllowed  bool      `json:"portForwardingAllowed"`
	AgentForwardingAllowed bool      `json:"agentForwardingAllowed"`
}

func (AuthorizationEvidenceHop) GetField

func (this AuthorizationEvidenceHop) GetField(name string) (any, bool, error)

type AuthorizationEvidenceOrigin

type AuthorizationEvidenceOrigin struct {
	User              string `json:"user"`
	Host              string `json:"host"`
	AuthorizationKind string `json:"authorizationKind"`
}

func (AuthorizationEvidenceOrigin) GetField

func (this AuthorizationEvidenceOrigin) GetField(name string) (any, bool, error)

type AuthorizationEvidencePolicy

type AuthorizationEvidencePolicy struct {
	PtyAllowed             bool `json:"ptyAllowed"`
	PortForwardingAllowed  bool `json:"portForwardingAllowed"`
	AgentForwardingAllowed bool `json:"agentForwardingAllowed"`
}

func (AuthorizationEvidencePolicy) GetField

func (this AuthorizationEvidencePolicy) GetField(name string) (any, bool, error)

type AuthorizationEvidenceProvider

type AuthorizationEvidenceProvider interface {
	AuthorizationEvidence() *AuthorizationEvidence
}

type AuthorizedKeyPolicy added in v0.7.7

type AuthorizedKeyPolicy struct {
	ForcedCommand          *string
	Environment            sys.EnvVars
	PtyAllowed             bool
	PortForwardingAllowed  bool
	AgentForwardingAllowed bool
	// contains filtered or unexported fields
}

func AuthorizedKeyPolicyOf added in v0.7.7

func AuthorizedKeyPolicyOf(auth Authorization) *AuthorizedKeyPolicy

func ValidateAuthorizationEvidenceCertificate

func ValidateAuthorizationEvidenceCertificate(evidence *AuthorizationEvidence, certificate *ssh.Certificate, username string, now time.Time) (*AuthorizedKeyPolicy, error)

func ValidateBifroestDelegationEvidence

func ValidateBifroestDelegationEvidence(evidence *AuthorizationEvidence, certificate *ssh.Certificate, username string, audiences []string, maxValidity time.Duration, now time.Time) (*AuthorizedKeyPolicy, error)

func (*AuthorizedKeyPolicy) AllowsListen added in v0.7.7

func (this *AuthorizedKeyPolicy) AllowsListen(host string, port uint32) bool

func (*AuthorizedKeyPolicy) AllowsOpen added in v0.7.7

func (this *AuthorizedKeyPolicy) AllowsOpen(dest bnet.HostPort) bool

func (*AuthorizedKeyPolicy) HasPortForwardingDestinationRestrictions

func (this *AuthorizedKeyPolicy) HasPortForwardingDestinationRestrictions() bool

type Authorizer

type Authorizer interface {
	AuthorizePublicKey(PublicKeyRequest) (Authorization, error)
	AuthorizePassword(PasswordRequest) (Authorization, error)
	AuthorizeInteractive(InteractiveRequest) (Authorization, error)

	// RestoreFromSession tries to restore the existing authorization from the given
	// session.Session. If the given session does not contain enough information to restore
	// the Authorization ErrNoSuchAuthorization is returned.
	RestoreFromSession(context.Context, session.Session, *RestoreOpts) (Authorization, error)
}

type AuthorizerFacade

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

func NewAuthorizerFacade

func NewAuthorizerFacade(ctx context.Context, flows *configuration.Flows) (*AuthorizerFacade, error)

func NewAuthorizerFacadeWithObserver

func NewAuthorizerFacadeWithObserver(ctx context.Context, flows *configuration.Flows, observer FlowAuthorizationObserver) (*AuthorizerFacade, error)

func (*AuthorizerFacade) AuthorizeInteractive

func (this *AuthorizerFacade) AuthorizeInteractive(req InteractiveRequest) (Authorization, error)

func (*AuthorizerFacade) AuthorizePassword

func (this *AuthorizerFacade) AuthorizePassword(req PasswordRequest) (Authorization, error)

func (*AuthorizerFacade) AuthorizePublicKey

func (this *AuthorizerFacade) AuthorizePublicKey(req PublicKeyRequest) (Authorization, error)

func (*AuthorizerFacade) Close

func (this *AuthorizerFacade) Close() (rErr error)

func (*AuthorizerFacade) OidcRefreshAuthorizer

func (this *AuthorizerFacade) OidcRefreshAuthorizer(flow configuration.FlowName) *OidcDeviceAuthAuthorizer

func (*AuthorizerFacade) RestoreFromSession

func (this *AuthorizerFacade) RestoreFromSession(ctx context.Context, sess session.Session, opts *RestoreOpts) (Authorization, error)

type AuthorizerFactory added in v0.2.0

type AuthorizerFactory[C any, A CloseableAuthorizer] func(ctx context.Context, flow configuration.FlowName, conf C) (A, error)

func RegisterAuthorizer added in v0.2.0

func RegisterAuthorizer[C any, A CloseableAuthorizer](factory AuthorizerFactory[C, A]) AuthorizerFactory[C, A]

type BifroestAuthorization

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

func (*BifroestAuthorization) AuthorizationEvidence

func (this *BifroestAuthorization) AuthorizationEvidence() *AuthorizationEvidence

func (*BifroestAuthorization) AuthorizationKind

func (*BifroestAuthorization) AuthorizationKind() string

func (*BifroestAuthorization) AuthorizedKeyPolicy

func (this *BifroestAuthorization) AuthorizedKeyPolicy() *AuthorizedKeyPolicy

func (*BifroestAuthorization) Dispose

func (this *BifroestAuthorization) Dispose(ctx context.Context) (bool, error)

func (*BifroestAuthorization) EnvVars

func (*BifroestAuthorization) EnvVars() sys.EnvVars

func (*BifroestAuthorization) FindSession

func (this *BifroestAuthorization) FindSession() session.Session

func (*BifroestAuthorization) FindSessionsPublicKey

func (*BifroestAuthorization) FindSessionsPublicKey() ssh.PublicKey

func (*BifroestAuthorization) Flow

func (*BifroestAuthorization) GetField

func (this *BifroestAuthorization) GetField(name string, ce ContextEnabled) (any, bool, error)

func (*BifroestAuthorization) IsAuthorized

func (*BifroestAuthorization) IsAuthorized() bool

func (*BifroestAuthorization) Remote

func (this *BifroestAuthorization) Remote() net.Remote

type BifroestAuthorizer

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

func (*BifroestAuthorizer) AuthorizeInteractive

func (this *BifroestAuthorizer) AuthorizeInteractive(req InteractiveRequest) (Authorization, error)

func (*BifroestAuthorizer) AuthorizePassword

func (this *BifroestAuthorizer) AuthorizePassword(req PasswordRequest) (Authorization, error)

func (*BifroestAuthorizer) AuthorizePublicKey

func (this *BifroestAuthorizer) AuthorizePublicKey(req PublicKeyRequest) (Authorization, error)

func (*BifroestAuthorizer) Close

func (*BifroestAuthorizer) Close() error

func (*BifroestAuthorizer) RestoreFromSession

func (this *BifroestAuthorizer) RestoreFromSession(ctx context.Context, sess session.Session, opts *RestoreOpts) (Authorization, error)

func (*BifroestAuthorizer) SupportsUserCertificates

func (*BifroestAuthorizer) SupportsUserCertificates()

type CloseableAuthorizer

type CloseableAuthorizer interface {
	Authorizer
	io.Closer
}

type ContextEnabled

type ContextEnabled interface {
	Context() essh.Context
}

type FlowAuthorizationMethod

type FlowAuthorizationMethod string
const (
	FlowAuthorizationMethodPublicKey           FlowAuthorizationMethod = "public-key"
	FlowAuthorizationMethodPassword            FlowAuthorizationMethod = "password"
	FlowAuthorizationMethodKeyboardInteractive FlowAuthorizationMethod = "keyboard-interactive"
)

type FlowAuthorizationObservation

type FlowAuthorizationObservation struct {
	Flow              configuration.FlowName
	ConnectionId      string
	SessionId         string
	Method            FlowAuthorizationMethod
	Phase             FlowAuthorizationPhase
	Outcome           FlowAuthorizationOutcome
	AuthorizationKind string
	Err               error
}

type FlowAuthorizationObserver

type FlowAuthorizationObserver func(context.Context, FlowAuthorizationObservation) error

type FlowAuthorizationOutcome

type FlowAuthorizationOutcome string
const (
	FlowAuthorizationOutcomeAccepted FlowAuthorizationOutcome = "accepted"
	FlowAuthorizationOutcomeDenied   FlowAuthorizationOutcome = "denied"
	FlowAuthorizationOutcomeFailed   FlowAuthorizationOutcome = "failed"
)

type FlowAuthorizationPhase

type FlowAuthorizationPhase string
const (
	FlowAuthorizationPhaseCandidate FlowAuthorizationPhase = "candidate"
	FlowAuthorizationPhaseVerified  FlowAuthorizationPhase = "verified"
)

type HtpasswdAuthorizer added in v0.2.0

type HtpasswdAuthorizer struct {
	Logger log.Logger
	// contains filtered or unexported fields
}

func (*HtpasswdAuthorizer) AuthorizeInteractive added in v0.2.0

func (this *HtpasswdAuthorizer) AuthorizeInteractive(req InteractiveRequest) (Authorization, error)

func (*HtpasswdAuthorizer) AuthorizePassword added in v0.2.0

func (this *HtpasswdAuthorizer) AuthorizePassword(req PasswordRequest) (Authorization, error)

func (*HtpasswdAuthorizer) AuthorizePublicKey added in v0.2.0

func (this *HtpasswdAuthorizer) AuthorizePublicKey(req PublicKeyRequest) (Authorization, error)

func (*HtpasswdAuthorizer) Close added in v0.2.0

func (this *HtpasswdAuthorizer) Close() error

func (*HtpasswdAuthorizer) RestoreFromSession added in v0.2.0

func (this *HtpasswdAuthorizer) RestoreFromSession(ctx context.Context, sess session.Session, opts *RestoreOpts) (Authorization, error)

type InteractiveRequest

type InteractiveRequest interface {
	Request
	SendInfo(string) error
	SendError(string) error
	Prompt(msg string, echoOn bool) (string, error)
}

type LocalAuthorizer

type LocalAuthorizer struct {
	Logger log.Logger
	// contains filtered or unexported fields
}

func (*LocalAuthorizer) AuthorizeInteractive

func (this *LocalAuthorizer) AuthorizeInteractive(req InteractiveRequest) (Authorization, error)

func (*LocalAuthorizer) AuthorizePassword

func (this *LocalAuthorizer) AuthorizePassword(req PasswordRequest) (Authorization, error)

func (*LocalAuthorizer) AuthorizePublicKey

func (this *LocalAuthorizer) AuthorizePublicKey(req PublicKeyRequest) (Authorization, error)

func (*LocalAuthorizer) Close

func (this *LocalAuthorizer) Close() error

func (*LocalAuthorizer) RestoreFromSession

func (this *LocalAuthorizer) RestoreFromSession(ctx context.Context, sess session.Session, opts *RestoreOpts) (Authorization, error)

func (*LocalAuthorizer) SupportsUserCertificates

func (*LocalAuthorizer) SupportsUserCertificates()

type NoneAuthorizer added in v0.4.0

type NoneAuthorizer struct {
	Logger log.Logger
	// contains filtered or unexported fields
}

func NewNone added in v0.4.0

func (*NoneAuthorizer) AuthorizeInteractive added in v0.4.0

func (this *NoneAuthorizer) AuthorizeInteractive(req InteractiveRequest) (Authorization, error)

func (*NoneAuthorizer) AuthorizePassword added in v0.4.0

func (this *NoneAuthorizer) AuthorizePassword(req PasswordRequest) (Authorization, error)

func (*NoneAuthorizer) AuthorizePublicKey added in v0.4.0

func (this *NoneAuthorizer) AuthorizePublicKey(req PublicKeyRequest) (Authorization, error)

func (*NoneAuthorizer) Close added in v0.4.0

func (this *NoneAuthorizer) Close() error

func (*NoneAuthorizer) RestoreFromSession added in v0.4.0

func (this *NoneAuthorizer) RestoreFromSession(ctx context.Context, sess session.Session, _ *RestoreOpts) (Authorization, error)

type OidcDeviceAuthAuthorizer

type OidcDeviceAuthAuthorizer struct {
	Logger       log.Logger
	OnVerified   func(session.Session, time.Time)
	OnLostAccess func(session.Session)
	// contains filtered or unexported fields
}

func (*OidcDeviceAuthAuthorizer) AuthorizeInteractive

func (this *OidcDeviceAuthAuthorizer) AuthorizeInteractive(req InteractiveRequest) (Authorization, error)

func (*OidcDeviceAuthAuthorizer) AuthorizePassword

func (this *OidcDeviceAuthAuthorizer) AuthorizePassword(req PasswordRequest) (Authorization, error)

func (*OidcDeviceAuthAuthorizer) AuthorizePublicKey

func (this *OidcDeviceAuthAuthorizer) AuthorizePublicKey(req PublicKeyRequest) (Authorization, error)

func (*OidcDeviceAuthAuthorizer) Close

func (this *OidcDeviceAuthAuthorizer) Close() error

func (*OidcDeviceAuthAuthorizer) NextRefreshAt

func (this *OidcDeviceAuthAuthorizer) NextRefreshAt(ctx context.Context, sess session.Session) (time.Time, error)

func (*OidcDeviceAuthAuthorizer) RefreshSession

func (this *OidcDeviceAuthAuthorizer) RefreshSession(ctx context.Context, sess session.Session) (next time.Time, lost bool, err error)

RefreshSession serializes token exchange and persistence with reconnects for this authorizer.

func (*OidcDeviceAuthAuthorizer) RestoreFromSession

func (this *OidcDeviceAuthAuthorizer) RestoreFromSession(ctx context.Context, sess session.Session, opts *RestoreOpts) (Authorization, error)

func (*OidcDeviceAuthAuthorizer) VerificationDeadline

func (this *OidcDeviceAuthAuthorizer) VerificationDeadline(ctx context.Context, sess session.Session) (time.Time, error)

VerificationDeadline returns the persisted grant's absolute verification deadline without contacting the provider.

type OidcIdToken

type OidcIdToken struct {
	*coidc.IDToken
	// contains filtered or unexported fields
}

func (*OidcIdToken) GetField

func (this *OidcIdToken) GetField(name string) (_ any, _ bool, err error)

type OidcToken

type OidcToken struct {
	*oauth2.Token
}

func (OidcToken) GetField

func (this OidcToken) GetField(name string) (any, bool)

func (*OidcToken) SetRaw

func (this *OidcToken) SetRaw(v *oauth2.Token) error

type OidcUserInfo

type OidcUserInfo struct {
	*coidc.UserInfo
	// contains filtered or unexported fields
}

func (*OidcUserInfo) GetField

func (this *OidcUserInfo) GetField(name string) (_ any, _ bool, err error)

type PasswordRequest

type PasswordRequest interface {
	Request
	RemotePassword() string
}

type PublicKeyRequest

type PublicKeyRequest interface {
	Request
	RemotePublicKey() gossh.PublicKey
}

type Request

type Request interface {
	Sessions() session.Repository
	Connection() connection.Connection
	Context() essh.Context
	Validate(Authorization) (bool, error)
}

type RestoreOpts

type RestoreOpts struct {
	// AutoCleanUpAllowed tells the Authorizer to clean up everything
	// automatically while executing the search. The requester will never
	// see the requested result. This is false by default because it could
	// lead to quite performance impacts or other unwanted side effects.
	//
	// Therefore: Use with caution.
	AutoCleanUpAllowed *bool

	// Logger will be used (if any log is required) instead of the standard logger.
	Logger log.Logger
}

RestoreOpts adds some more hints what should happen when find methods of Repository are executed.

func (*RestoreOpts) GetLogger

func (this *RestoreOpts) GetLogger(or func() log.Logger) log.Logger

func (*RestoreOpts) IsAutoCleanUpAllowed

func (this *RestoreOpts) IsAutoCleanUpAllowed() bool

type SimpleAuthorizer added in v0.2.0

type SimpleAuthorizer struct {
	Logger log.Logger
	// contains filtered or unexported fields
}

func NewSimple added in v0.2.0

func (*SimpleAuthorizer) AuthorizeInteractive added in v0.2.0

func (this *SimpleAuthorizer) AuthorizeInteractive(req InteractiveRequest) (Authorization, error)

func (*SimpleAuthorizer) AuthorizePassword added in v0.2.0

func (this *SimpleAuthorizer) AuthorizePassword(req PasswordRequest) (Authorization, error)

func (*SimpleAuthorizer) AuthorizePublicKey added in v0.2.0

func (this *SimpleAuthorizer) AuthorizePublicKey(req PublicKeyRequest) (Authorization, error)

func (*SimpleAuthorizer) Close added in v0.2.0

func (this *SimpleAuthorizer) Close() error

func (*SimpleAuthorizer) RestoreFromSession added in v0.2.0

func (this *SimpleAuthorizer) RestoreFromSession(ctx context.Context, sess session.Session, opts *RestoreOpts) (Authorization, error)

func (*SimpleAuthorizer) SupportsUserCertificates

func (*SimpleAuthorizer) SupportsUserCertificates()

Jump to

Keyboard shortcuts

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