Documentation
¶
Index ¶
- func InstallDefaultAuthorizationServerConfigValues()
- func ModifyLogMetadataByAccessAuthorizeParam(ctxt context.Context, theTags log.Fields)
- type APIConfig
- type APIServerConfig
- type AccessAuthorizeParam
- type AccessAuthorizeParamKey
- type AuthenticateRequestParamLocConfig
- type AuthenticationConfig
- type AuthenticationSubmodule
- type AuthnBypassConfig
- type AuthnBypassMatchEntry
- type AuthorizationConfig
- type AuthorizationServerConfig
- type AuthorizationSubmodule
- type AuthorizeRequestParamLocConfig
- type CustomFieldValidator
- type CustomValidationsConfig
- type DatabaseConfig
- type EndpointConfig
- type HTTPRequestLogging
- type HTTPServerConfig
- type HTTPServerTimeoutConfig
- type HostAuthorizationConfig
- type IntrospectionConfig
- type MetricsConfig
- type MetricsFeatureConfig
- type OpenIDClaimsOfInterestConfig
- type OpenIDIssuerConfig
- type PathAuthorizationConfig
- type PermissionForAPIMethodConfig
- type RegexCheck
- type UnknownUserActionConfig
- type UserManageSubmodule
- type UserRoleConfig
- type UserRolesConfig
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func InstallDefaultAuthorizationServerConfigValues ¶
func InstallDefaultAuthorizationServerConfigValues()
InstallDefaultAuthorizationServerConfigValues installs default config parameters in viper
func ModifyLogMetadataByAccessAuthorizeParam ¶
ModifyLogMetadataByAccessAuthorizeParam update log metadata with info from AccessAuthorizeParam
@param ctxt context.Context - a request context @param theTags log.Fields - a log metadata to update
Types ¶
type APIConfig ¶
type APIConfig struct {
// Endpoint sets API endpoint related parameters
Endpoint EndpointConfig `mapstructure:"endPoint" json:"endPoint" validate:"required,dive"`
// RequestLogging sets API request logging parameters
RequestLogging HTTPRequestLogging `mapstructure:"requestLogging" json:"requestLogging" validate:"required,dive"`
}
APIConfig defines API settings for a submodule
type APIServerConfig ¶
type APIServerConfig struct {
// Enabled whether this API is enabled
Enabled bool `mapstructure:"enabled" json:"enabled"`
// Server defines HTTP server parameters
Server HTTPServerConfig `mapstructure:"service" json:"service" validate:"required_with=Enabled,dive"`
// APIs defines API settings for a submodule
APIs APIConfig `mapstructure:"apis" json:"apis" validate:"required_with=Enabled,dive"`
}
APIServerConfig defines HTTP API / server parameters
type AccessAuthorizeParam ¶
type AccessAuthorizeParam struct {
// UserID is the ID of the user needing access
UserID string `json:"user_id" validate:"required,user_id"`
// Method is the method used
Method string `json:"method" validate:"required,oneof=GET HEAD PUT POST PATCH DELETE OPTIONS"`
// Path is the request Path needing access check
Path string `json:"path" validate:"required,uri"`
// Host is the Host needing access check
Host string `json:"host" validate:"required,fqdn"`
}
AccessAuthorizeParam contains the authorization request parameters, stored in request context
func (*AccessAuthorizeParam) String ¶
func (i *AccessAuthorizeParam) String() string
String implements toString for object
func (*AccessAuthorizeParam) UpdateLogTags ¶
func (i *AccessAuthorizeParam) UpdateLogTags(tags log.Fields)
UpdateLogTags updates Apex log.Fields map with values from the parameter
@param tags log.Fields - log.Fields to update
type AccessAuthorizeParamKey ¶
type AccessAuthorizeParamKey struct{}
AccessAuthorizeParamKey associated key for AccessAuthorizeParam when storing in request context
type AuthenticateRequestParamLocConfig ¶ added in v0.5.2
type AuthenticateRequestParamLocConfig struct {
// Host is the host / FQDN of the request being authenticated
Host string `mapstructure:"host" json:"host" validate:"required"`
// Path is the URI path of the request being authenticated
Path string `mapstructure:"path" json:"path" validate:"required"`
// Method is the HTTP method of the request being authenticated
Method string `mapstructure:"method" json:"method" validate:"required"`
}
AuthenticateRequestParamLocConfig defines which HTTP headers to parse to get the parameters of a REST request to authenticate. It is expected that the component (i.e. a proxy) requesting authentication for a request will provide the needed values through these headers when it contacts the authentication server.
type AuthenticationConfig ¶
type AuthenticationConfig struct {
// TargetAudience if specified, the token must contain an "aud" claim which matches this value.
TargetAudience *string `mapstructure:"targetAudience,omitempty" json:"target_audience,omitempty" validate:"omitempty"`
// TargetClaims sets which claims to parse from a token to get key parameters regarding a user.
TargetClaims OpenIDClaimsOfInterestConfig `mapstructure:"targetClaims" json:"target_claims" validate:"required,dive"`
// RequestParamLocation sets which HTTP headers to parse to get the parameters of
// a REST request to authenticate. It is expected that the component (i.e. a proxy) requesting
// authentication for a request will provide the needed values through these headers when it
// contacts the authentication server.
RequestParamLocation AuthenticateRequestParamLocConfig `mapstructure:"requestParamHeaders" json:"requestParamHeaders" validate:"required,dive"`
// Introspection define OAuth2 token introspect operation config
Introspection IntrospectionConfig `mapstructure:"introspect" json:"introspect" validate:"required,dive"`
// Bypass authentication bypass rules
Bypass *AuthnBypassConfig `mapstructure:"bypass,omitempty" json:"bypass,omitempty" validate:"omitempty,dive"`
}
AuthenticationConfig describes the REST API authentication config
type AuthenticationSubmodule ¶
type AuthenticationSubmodule struct {
APIServerConfig `mapstructure:",squash"`
AuthenticationConfig `mapstructure:",squash"`
}
AuthenticationSubmodule defines authentication submodule config
type AuthnBypassConfig ¶ added in v0.5.2
type AuthnBypassConfig struct {
// Rules the authentication bypass rules to check against
Rules []AuthnBypassMatchEntry `mapstructure:"rules,omitempty" json:"rules,omitempty" validate:"omitempty,gte=1,dive"`
}
AuthnBypassConfig authentication bypass configuration
type AuthnBypassMatchEntry ¶ added in v0.5.2
type AuthnBypassMatchEntry struct {
// MatchType indicates which request element this rules applies to
MatchType string `mapstructure:"type" json:"type" validate:"required,oneof=method host path"`
// Matches if a request property matches one of the possibilities, the request can
// bypass authentication.
Matches []string `mapstructure:"matches" json:"matches" validate:"required,gte=1"`
}
AuthnBypassMatchEntry one authentication bypass rule
type AuthorizationConfig ¶
type AuthorizationConfig struct {
// Rules is the list of TargetHostSpec supported by the server. The host of "*"
// functions as a wildcard. If a request host is not explicitly listed here, it may match
// against "*" if that was defined.
Rules []HostAuthorizationConfig `mapstructure:"rules" json:"rules" validate:"required_with=Enabled,dive"`
// RequestParamLocation sets which HTTP headers to parse to get the parameters of
// a REST request to authorize. It is expected that the component (i.e. a proxy) requesting
// authorization for a request will provide the needed values through these headers when it
// contacts the authorization server.
RequestParamLocation AuthorizeRequestParamLocConfig `mapstructure:"requestParamHeaders" json:"requestParamHeaders" validate:"required,dive"`
// UnknownUser sets what actions to take when the request being authorized is made
// by an unknown user
UnknownUser UnknownUserActionConfig `mapstructure:"forUnknownUser" json:"forUnknownUser" validate:"required,dive"`
}
AuthorizationConfig describes the REST API authorization config
type AuthorizationServerConfig ¶
type AuthorizationServerConfig struct {
// Metrics metrics framework configuration
Metrics MetricsConfig `mapstructure:"metrics" json:"metrics" validate:"required,dive"`
// CustomRegex sets custom regex used by validator for custom field tags
CustomRegex CustomValidationsConfig `mapstructure:"customValidationRegex" json:"customValidationRegex" validate:"required,dive"`
// UserManagement are the user management submodule configs
UserManagement UserManageSubmodule `mapstructure:"userManagement" json:"userManagement" validate:"required,dive"`
// Authorization are the authorization submodule configs
Authorization AuthorizationSubmodule `mapstructure:"authorize" json:"authorize" validate:"required,dive"`
// Authentication are the authentication submodule configs
Authentication AuthenticationSubmodule `mapstructure:"authenticate" json:"authenticate" validate:"required,dive"`
}
AuthorizationServerConfig is the authorization server config
func (AuthorizationServerConfig) Validate ¶
func (c AuthorizationServerConfig) Validate() error
Validate the authorization server config
@return nil if valid, or an error
type AuthorizationSubmodule ¶
type AuthorizationSubmodule struct {
APIServerConfig `mapstructure:",squash"`
AuthorizationConfig `mapstructure:",squash"`
}
AuthorizationSubmodule defines authorization submodule config
type AuthorizeRequestParamLocConfig ¶
type AuthorizeRequestParamLocConfig struct {
// Host is the host / FQDN of the request being authorized
Host string `mapstructure:"host" json:"host" validate:"required"`
// Path is the URI path of the request being authorized
Path string `mapstructure:"path" json:"path" validate:"required"`
// Method is the HTTP method of the request being authorized
Method string `mapstructure:"method" json:"method" validate:"required"`
// UserID is the user ID of the user making the request
UserID string `mapstructure:"userID" json:"userID" validate:"required"`
// Username is the username of the user making the request
Username string `mapstructure:"username" json:"username" validate:"required"`
// FirstName is the first name / given name of the user making the request
FirstName string `mapstructure:"firstName" json:"firstName" validate:"required"`
// LastName is the last name / surname / family name of the user making the request
LastName string `mapstructure:"lastName" json:"lastName" validate:"required"`
// Email is the email of the user making the request
Email string `mapstructure:"email" json:"email" validate:"required"`
}
AuthorizeRequestParamLocConfig defines which HTTP headers to parse to get the parameters of a REST request to authorize. It is expected that the component (i.e. a proxy) requesting authorization for a request will provide the needed values through these headers when it contacts the authorization server.
type CustomFieldValidator ¶
type CustomFieldValidator interface {
/*
RegisterWithValidator register with the validator this customer validation support
@param v *validator.Validate - the validator to register against
@return whether successful
*/
RegisterWithValidator(v *validator.Validate) error
/*
ValidateUserID custom user ID validation function
@param fl validator.FieldLevel - the field to validate
@return whether is valid
*/
ValidateUserID(fl validator.FieldLevel) bool
/*
ValidateUserName custom user name validation function
@param fl validator.FieldLevel - the field to validate
@return whether is valid
*/
ValidateUserName(fl validator.FieldLevel) bool
/*
ValidatePersonalName custom surname and family name validation function
@param fl validator.FieldLevel - the field to validate
@return whether is valid
*/
ValidatePersonalName(fl validator.FieldLevel) bool
/*
ValidateRoleName custom role name validation function
@param fl validator.FieldLevel - the field to validate
@return whether is valid
*/
ValidateRoleName(fl validator.FieldLevel) bool
/*
ValidatePermissionName custom permission name validation function
@param fl validator.FieldLevel - the field to validate
@return whether is valid
*/
ValidatePermissionName(fl validator.FieldLevel) bool
}
CustomFieldValidator support class for running custom validation of fields
func GetCustomFieldValidator ¶
func GetCustomFieldValidator( userIDRegex string, usernameRegex string, nameRegex string, roleNameRegex string, permissionRegex string, ) (CustomFieldValidator, error)
GetCustomFieldValidator get new CustomFieldValidator instance
@param userIDRegex string - usr ID validation regex @param usernameRegex string - username validation regex @param nameRegex string - personal name validation regex @param roleNameRegex string - role name validation regex @param permissionRegex string - permission name validation regex @return new CustomFieldValidator instance
type CustomValidationsConfig ¶
type CustomValidationsConfig struct {
// UserIDRegex is the regex pattern used to validate a user ID
UserIDRegex string `mapstructure:"userID" json:"userID" validate:"required"`
// UserNameRegex is the regex pattern used to validate a username
UserNameRegex string `mapstructure:"username" json:"username" validate:"required"`
// PersonalNameRegex is the regex pattern used to validate a personal name
PersonalNameRegex string `mapstructure:"personalName" json:"personalName" validate:"required"`
// RoleNameRegex is the regex pattern used to validate a role name
RoleNameRegex string `mapstructure:"roleName" json:"roleName" validate:"required"`
// PermissionRegex is the regex pattern used to validate a permission name
PermissionRegex string `mapstructure:"permission" json:"permission" validate:"required"`
}
CustomValidationsConfig provides the custom validation regex patterns
func (CustomValidationsConfig) DefineCustomFieldValidator ¶
func (c CustomValidationsConfig) DefineCustomFieldValidator() (CustomFieldValidator, error)
DefineCustomFieldValidator defines a CustomFieldValidator based on the config parameters
@return the defined CustomFieldValidator
type DatabaseConfig ¶
type DatabaseConfig struct {
// Host is the DB host
Host string `json:"host" validate:"required"`
// DB is the database name
DB string `json:"db" validate:"required"`
// User is the database user
User string `json:"user" validate:"required"`
}
DatabaseConfig database related configuration
type EndpointConfig ¶
type EndpointConfig struct {
// PathPrefix is the end-point path prefix for the APIs
PathPrefix string `mapstructure:"pathPrefix" json:"pathPrefix" validate:"required"`
}
EndpointConfig defines API endpoint config
type HTTPRequestLogging ¶
type HTTPRequestLogging struct {
// LogLevel output request logs at this level
LogLevel goutils.HTTPRequestLogLevel `mapstructure:"logLevel" json:"logLevel" validate:"oneof=warn info debug"`
// HealthLogLevel output health check logs at this level
HealthLogLevel goutils.HTTPRequestLogLevel `mapstructure:"healthLogLevel" json:"healthLogLevel" validate:"oneof=warn info debug"`
// RequestIDHeader is the HTTP header containing the API request ID
RequestIDHeader string `mapstructure:"requestIDHeader" json:"requestIDHeader"`
// DoNotLogHeaders is the list of headers to not include in logging metadata
DoNotLogHeaders []string `mapstructure:"skipHeaders" json:"skipHeaders"`
}
HTTPRequestLogging defines HTTP request logging parameters
type HTTPServerConfig ¶
type HTTPServerConfig struct {
// ListenOn is the interface the HTTP server will listen on
ListenOn string `mapstructure:"listenOn" json:"listenOn" validate:"required,ip"`
// Port is the port the HTTP server will listen on
Port uint16 `mapstructure:"appPort" json:"appPort" validate:"required,gt=0,lt=65536"`
// Timeouts sets the HTTP timeout settings
Timeouts HTTPServerTimeoutConfig `mapstructure:"timeoutSecs" json:"timeoutSecs" validate:"required,dive"`
}
HTTPServerConfig defines the HTTP server parameters
type HTTPServerTimeoutConfig ¶
type HTTPServerTimeoutConfig struct {
// ReadTimeout is the maximum duration for reading the entire
// request, including the body in seconds. A zero or negative
// value means there will be no timeout.
ReadTimeout int `mapstructure:"read" json:"read" validate:"gte=0"`
// WriteTimeout is the maximum duration before timing out
// writes of the response in seconds. A zero or negative value
// means there will be no timeout.
WriteTimeout int `mapstructure:"write" json:"write" validate:"gte=0"`
// IdleTimeout is the maximum amount of time to wait for the
// next request when keep-alives are enabled in seconds. If
// IdleTimeout is zero, the value of ReadTimeout is used. If
// both are zero, there is no timeout.
IdleTimeout int `mapstructure:"idle" json:"idle" validate:"gte=0"`
}
HTTPServerTimeoutConfig defines the timeout settings for HTTP server
type HostAuthorizationConfig ¶
type HostAuthorizationConfig struct {
// Host is the hostname for this group of path authorizers
Host string `mapstructure:"host" json:"host" validate:"required,fqdn|eq=*"`
// TargetPaths is the list of path being checked for this host
TargetPaths []PathAuthorizationConfig `mapstructure:"allowedPaths" json:"allowedPaths" validate:"required,gte=1,dive"`
}
HostAuthorizationConfig is a group path authorizations for a specific host
type IntrospectionConfig ¶ added in v0.4.0
type IntrospectionConfig struct {
// Enabled whether introspection enabled
Enabled bool `mapstructure:"enabled" json:"enabled"`
// ReIntrospectInterval interval (sec) to periodically re-introspect cached tokens
ReIntrospectInterval int `mapstructure:"recheckIntervalSec" json:"recheck_interval_sec" validate:"gte=30"`
// CacheCleanInterval interval (sec) to periodically clear expired tokens from cache
CacheCleanInterval int `mapstructure:"cacheCleanIntervalSec" json:"cache_clean_interval_sec" validate:"gte=30"`
// CachePurgeInterval interval (sec) to periodically purge the token cache
CachePurgeInterval int `mapstructure:"cachePurgeIntervalSec" json:"cache_purge_interval_sec" validate:"gte=60"`
}
IntrospectionConfig OAuth2 token introspect operation config
type MetricsConfig ¶ added in v0.5.1
type MetricsConfig struct {
// Server defines HTTP server parameters
Server HTTPServerConfig `mapstructure:"service" json:"service" validate:"required_with=Enabled,dive"`
// MetricsEndpoint path to host the Prometheus metrics endpoint
MetricsEndpoint string `mapstructure:"metricsEndpoint" json:"metricsEndpoint" validate:"required"`
// MaxRequests max number of metrics requests in parallel to support
MaxRequests int `mapstructure:"maxRequests" json:"maxRequests" validate:"gte=1"`
// Features metrics framework features to enable
Features MetricsFeatureConfig `mapstructure:"features" json:"features" validate:"gte=1"`
}
MetricsConfig application metrics config
type MetricsFeatureConfig ¶ added in v0.5.1
type MetricsFeatureConfig struct {
// EnableAppMetrics whether to enable Golang application metrics
EnableAppMetrics bool `mapstructure:"enableAppMetrics" json:"enableAppMetrics"`
}
MetricsFeatureConfig metrics framework features config
type OpenIDClaimsOfInterestConfig ¶
type OpenIDClaimsOfInterestConfig struct {
// UserIDClaim is the claim for containing the user ID
UserIDClaim string `mapstructure:"userID" json:"userID" validate:"required"`
// UsernameClaim is the claim containing the user Name
UsernameClaim *string `mapstructure:"username,omitempty" json:"username,omitempty"`
// FirstNameClaim is the claim containing the first name / given name of the user
FirstNameClaim *string `mapstructure:"firstName,omitempty" json:"firstName,omitempty"`
// LastNameClaim is the claim containing the last name / surname / family name of the user
LastNameClaim *string `mapstructure:"lastName,omitempty" json:"lastName,omitempty"`
// EmailClaim is the claim containing the email of the user
EmailClaim *string `mapstructure:"email,omitempty" json:"email,omitempty"`
}
OpenIDClaimsOfInterestConfig sets which claims to parse from a token to get key parameters regarding a user.
Depending on the OpenID provider, these claims are present in the ID token, but may also be present in the access token; this is the case with KeyCloak.
type OpenIDIssuerConfig ¶
type OpenIDIssuerConfig struct {
// Issuer is the URL of the OpenID issuer
Issuer string `json:"issuer" validate:"required,url"`
// ClientID is the client ID to use during token introspection
ClientID *string `json:"client_id" validate:"omitempty"`
// ClientCred is the client credential to use during token introspection
ClientCred *string `json:"client_cred" validate:"omitempty"`
// CustomCA if provided, is the custom CA to use for the TLS session with this issuer.
CustomCA *string `json:"http_tls_ca,omitempty" validate:"omitempty,file"`
// RequestHostOverride if specified, use this as "Host" header when communicating with issuer
RequestHostOverride *string `json:"host_override" validate:"omitempty"`
}
OpenIDIssuerConfig defines connection parameters to one OpenID issuer
type PathAuthorizationConfig ¶
type PathAuthorizationConfig struct {
// PathRegexPattern is the regex for matching against a request URI path
PathRegexPattern string `mapstructure:"pathPattern" json:"pathPattern" validate:"required"`
// AllowedMethods is the list of allowed permission for each specified request
// method that is supportred by this URI. The method "*" functions as a wildcard.
// If the request method is not explicitly listed here, it may match against "*" if that
// was defined.
AllowedMethods []PermissionForAPIMethodConfig `mapstructure:"allowedMethods" json:"allowedMethods" validate:"required,gte=1,dive"`
}
PathAuthorizationConfig a single path authorization specification
type PermissionForAPIMethodConfig ¶
type PermissionForAPIMethodConfig struct {
// Method specify the REST method these permissions are associated with. "*" is a wildcard.
Method string `mapstructure:"method" json:"method" validate:"required,oneof=GET HEAD PUT POST PATCH DELETE OPTIONS *"`
// Permissions is the list of user permissions allowed to use a method
Permissions []string `mapstructure:"allowedPermissions" json:"allowedPermissions" validate:"required,gte=1,dive,user_permissions"`
}
PermissionForAPIMethodConfig lists the permissions needed use a method
type RegexCheck ¶
type RegexCheck interface {
/*
Match checks whether this regex finds a match against the input
@param s []byte - the string against
@return whether the input matchs against the regex
*/
Match(s []byte) (bool, error)
/*
String returns an ASCII description of the object
@return an ASCII description of the object
*/
String() string
}
RegexCheck is a wrapper object to perform a regex check against a string
func NewRegexCheck ¶
func NewRegexCheck(pattern string) (RegexCheck, error)
NewRegexCheck defines a new RegexCheck object
@param pattern string - regex pattern @return the RegexCheck instance
type UnknownUserActionConfig ¶
type UnknownUserActionConfig struct {
// AutoAdd set whether automatically record the unknown user during the authorization process
//
// Note: This can be dangerous as it could lead to denial-of-service due to resource exhaustion.
AutoAdd bool `mapstructure:"autoAdd" json:"autoAdd"`
}
UnknownUserActionConfig defines what actions to take when the request being authorized is made by an unknown user
type UserManageSubmodule ¶
type UserManageSubmodule struct {
APIServerConfig `mapstructure:",squash"`
UserRolesConfig `mapstructure:",squash"`
}
UserManageSubmodule defines user management submodule config
type UserRoleConfig ¶
type UserRoleConfig struct {
// AssignedPermissions is the list of permissions assigned to a role
AssignedPermissions []string `mapstructure:"permissions" json:"permissions" validate:"required,gte=1,dive,user_permissions"`
}
UserRoleConfig a single user role
type UserRolesConfig ¶
type UserRolesConfig struct {
// AvailableRoles is the set of roles supported by the system
AvailableRoles map[string]UserRoleConfig `mapstructure:"userRoles" json:"userRoles" validate:"required_with=Enabled,dive"`
}
UserRolesConfig a group of user roles