Help us shape the future of Go! Take the 2026 Go Developer Survey

http

package
v0.10.1 Latest Latest
Warning

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

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

Documentation

Overview

Package http provides authorization using HTTP-based Policy Decision Points (PDPs).

Index

Constants

View Source
const ConfigType = "httpv1"

ConfigType is the configuration type identifier for HTTP-based PDP authorization.

Variables

This section is empty.

Functions

This section is empty.

Types

type Authorizer

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

Authorizer implements the authorizers.Authorizer interface using an HTTP PDP.

func NewAuthorizer

func NewAuthorizer(config ConfigOptions, serverName string) (*Authorizer, error)

NewAuthorizer creates a new HTTP PDP authorizer from the provided configuration. Note: This function validates the config as a defensive measure, even though the factory also validates. This protects against direct calls to NewAuthorizer that bypass the factory.

func (*Authorizer) AuthorizeWithJWTClaims

func (a *Authorizer) AuthorizeWithJWTClaims(
	ctx context.Context,
	feature authorizers.MCPFeature,
	operation authorizers.MCPOperation,
	resourceID string,
	arguments map[string]interface{},
) (bool, error)

AuthorizeWithJWTClaims implements the authorizers.Authorizer interface. It extracts JWT claims from the context, builds a PORC expression, and delegates the authorization decision to the configured PDP.

func (*Authorizer) Close

func (a *Authorizer) Close() error

Close releases resources used by the authorizer.

type ClaimMapper

type ClaimMapper interface {
	// MapClaims maps JWT claims to principal attributes suitable for the target PDP.
	// The input is the raw JWT claims map, and the output is a map with claims
	// transformed according to the mapper's conventions.
	MapClaims(claims map[string]any) map[string]any
}

ClaimMapper defines the interface for mapping JWT claims to principal attributes. Different PDP implementations may have different conventions for claim names (e.g., MPE uses m-prefixed claims like "mroles", while OIDC uses standard claims like "roles").

type Client

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

Client handles HTTP communication with the PDP server.

func NewClient

func NewClient(config *ConnectionConfig) (*Client, error)

NewClient creates a new HTTP client for PDP communication.

func (*Client) Authorize

func (c *Client) Authorize(ctx context.Context, porc PORC, probe bool) (bool, error)

Authorize sends an authorization request to the PDP server. It returns true if the request is authorized, false otherwise.

func (*Client) Close

func (c *Client) Close() error

Close closes the HTTP client and releases resources.

type Config

type Config struct {
	Version string         `json:"version"`
	Type    string         `json:"type"`
	Options *ConfigOptions `json:"pdp"`
}

Config represents the complete authorization configuration file structure for HTTP-based PDP authorization. This includes the common version/type fields plus the PDP-specific "pdp" field.

type ConfigOptions

type ConfigOptions struct {
	// HTTP contains the HTTP connection configuration.
	HTTP *ConnectionConfig `json:"http,omitempty" yaml:"http,omitempty"`

	// Context configures what context information is included in the PORC.
	// By default, no MCP context is included in the PORC.
	Context *ContextConfig `json:"context,omitempty" yaml:"context,omitempty"`

	// ClaimMapping specifies which claim mapper to use for mapping JWT claims
	// to principal attributes. This field is required. Valid values: "mpe", "standard".
	// - "mpe": Uses MPE-specific m-prefixed claims (mroles, mgroups, mclearance, mannotations)
	// - "standard": Uses standard OIDC claim names (roles, groups)
	ClaimMapping string `json:"claim_mapping,omitempty" yaml:"claim_mapping,omitempty"`
}

ConfigOptions represents the HTTP PDP authorization configuration options.

func (*ConfigOptions) CreateClaimMapper

func (c *ConfigOptions) CreateClaimMapper() (ClaimMapper, error)

CreateClaimMapper creates a ClaimMapper based on the configured claim mapping type.

func (*ConfigOptions) GetClaimMapping

func (c *ConfigOptions) GetClaimMapping() string

GetClaimMapping returns the configured claim mapping type. The claim_mapping field is required and validated, so this will never return an empty string.

func (*ConfigOptions) GetContextConfig

func (c *ConfigOptions) GetContextConfig() ContextConfig

GetContextConfig returns the context configuration, or a default empty config if nil.

func (*ConfigOptions) Validate

func (c *ConfigOptions) Validate() error

Validate validates the HTTP PDP configuration options.

type ConnectionConfig

type ConnectionConfig struct {
	// URL is the base URL of the PDP server (e.g., "http://localhost:9000").
	URL string `json:"url" yaml:"url"`

	// Timeout is the HTTP request timeout in seconds. Default is 30.
	Timeout int `json:"timeout,omitempty" yaml:"timeout,omitempty"`

	// InsecureSkipVerify skips TLS certificate verification. Use only for testing.
	InsecureSkipVerify bool `json:"insecure_skip_verify,omitempty" yaml:"insecure_skip_verify,omitempty"`
}

ConnectionConfig contains configuration for the HTTP connection to the PDP.

type Context

type Context map[string]interface{}

Context represents additional context for the authorization decision.

type ContextConfig

type ContextConfig struct {
	// IncludeArgs enables inclusion of tool/prompt arguments in context.mcp.args.
	// Default is false.
	IncludeArgs bool `json:"include_args,omitempty" yaml:"include_args,omitempty"`

	// IncludeOperation enables inclusion of MCP operation metadata in context.mcp:
	// feature, operation, and resource_id fields.
	// Default is false.
	IncludeOperation bool `json:"include_operation,omitempty" yaml:"include_operation,omitempty"`
}

ContextConfig configures what context information is included in the PORC. All options default to false, meaning no MCP context is included by default.

type DecisionResponse

type DecisionResponse struct {
	Allow bool `json:"allow"`
}

DecisionResponse represents the response from the PDP decision endpoint.

type Factory

type Factory struct{}

Factory implements the authorizers.AuthorizerFactory interface for HTTP PDPs.

func (*Factory) CreateAuthorizer

func (*Factory) CreateAuthorizer(rawConfig json.RawMessage, serverName string) (authorizers.Authorizer, error)

CreateAuthorizer creates an HTTP PDP Authorizer from the configuration.

func (*Factory) ValidateConfig

func (*Factory) ValidateConfig(rawConfig json.RawMessage) error

ValidateConfig validates the HTTP PDP configuration.

type MPEClaimMapper

type MPEClaimMapper struct{}

MPEClaimMapper implements ClaimMapper for Manetu PolicyEngine (MPE). MPE uses m-prefixed claims (mroles, mgroups, mclearance, mannotations) and also accepts standard OIDC claims (roles, groups, clearance, annotations) which are mapped to their m-prefixed equivalents.

func (*MPEClaimMapper) MapClaims

func (*MPEClaimMapper) MapClaims(claims map[string]any) map[string]any

MapClaims maps JWT claims to MPE-compatible principal attributes. It maps standard JWT claims to MPE-specific principal attributes:

  • sub -> sub (subject identifier)
  • roles/mroles -> mroles (roles)
  • groups/mgroups -> mgroups (groups)
  • scope/scopes -> scopes (access scopes)
  • clearance/mclearance -> mclearance (clearance level)
  • annotations/mannotations -> mannotations (additional annotations)

Returns map[string]any to ensure the PDP can properly unmarshal the PORC structure for identity phase evaluation.

type PORC

type PORC map[string]interface{}

PORC represents a Principal-Operation-Resource-Context authorization request. This is a common input format for Policy Decision Points (PDPs).

type PORCBuilder

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

PORCBuilder builds PORC (Principal-Operation-Resource-Context) expressions from MCP authorization parameters for use with HTTP-based PDPs.

func NewPORCBuilder

func NewPORCBuilder(serverID string, contextConfig ContextConfig, claimMapper ClaimMapper) *PORCBuilder

NewPORCBuilder creates a new PORC builder with the given server ID, context configuration, and claim mapper.

func (*PORCBuilder) Build

func (b *PORCBuilder) Build(
	feature authorizers.MCPFeature,
	operation authorizers.MCPOperation,
	resourceID string,
	claims map[string]interface{},
	arguments map[string]interface{},
) PORC

Build creates a PORC expression from MCP authorization parameters. It maps MCP concepts to the PORC model:

  • principal: Built from JWT claims (sub, roles, groups, scopes, etc.)
  • operation: Derived from MCP feature and operation (e.g., "mcp:tool:call")
  • resource: The MCP resource identifier (tool name, prompt name, resource URI)
  • context: Additional context including tool arguments

type Principal

type Principal map[string]interface{}

Principal represents the principal (subject) making the request.

type StandardClaimMapper

type StandardClaimMapper struct{}

StandardClaimMapper implements ClaimMapper for standard OIDC claims. This mapper passes through standard OIDC claim names without modification and can be used with PDPs that expect standard OIDC conventions.

func (*StandardClaimMapper) MapClaims

func (*StandardClaimMapper) MapClaims(claims map[string]any) map[string]any

MapClaims maps JWT claims using standard OIDC conventions. It preserves standard claim names and normalizes common variations:

  • sub -> sub (subject identifier)
  • roles -> roles (roles, preserving standard name)
  • groups -> groups (groups, preserving standard name)
  • scope/scopes -> scopes (access scopes, normalized to plural)

Jump to

Keyboard shortcuts

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