Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions hscontrol/oidc.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,12 @@ func NewAuthProviderOIDC(
Scopes: cfg.Scope,
}

// Some OIDC providers (e.g. GitHub Actions) omit authorization_endpoint
// from their discovery document. Allow users to override it explicitly.
if cfg.AuthorizationEndpoint != "" {
oauth2Config.Endpoint.AuthURL = cfg.AuthorizationEndpoint
}

authCache := expirable.NewLRU[string, AuthInfo](
authCacheMaxEntries,
nil,
Expand Down
8 changes: 7 additions & 1 deletion hscontrol/types/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,11 @@ type OIDCConfig struct {
EmailVerifiedRequired bool
UseExpiryFromToken bool
PKCE PKCEConfig
// AuthorizationEndpoint allows overriding the authorization endpoint
// returned by the OIDC provider discovery document. This is required
// for providers (such as GitHub Actions OIDC) that do not include
// authorization_endpoint in their discovery metadata.
AuthorizationEndpoint string
}

type DERPConfig struct {
Expand Down Expand Up @@ -1266,7 +1271,8 @@ func LoadServerConfig() (*Config, error) {
AllowedUsers: viper.GetStringSlice("oidc.allowed_users"),
AllowedGroups: viper.GetStringSlice("oidc.allowed_groups"),
EmailVerifiedRequired: viper.GetBool("oidc.email_verified_required"),
UseExpiryFromToken: viper.GetBool("oidc.use_expiry_from_token"),
UseExpiryFromToken: viper.GetBool("oidc.use_expiry_from_token"),
AuthorizationEndpoint: viper.GetString("oidc.authorization_endpoint"),
PKCE: PKCEConfig{
Enabled: viper.GetBool("oidc.pkce.enabled"),
Method: viper.GetString("oidc.pkce.method"),
Expand Down