mcp: authorize: load session from the access token (#5591)

This commit is contained in:
Denis Mishin 2025-04-28 16:32:06 -04:00 committed by GitHub
parent 0602f5e00d
commit daaf5b8e30
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 112 additions and 17 deletions

View file

@ -16,6 +16,7 @@ import (
"github.com/pomerium/pomerium/config"
"github.com/pomerium/pomerium/internal/atomicutil"
"github.com/pomerium/pomerium/internal/log"
"github.com/pomerium/pomerium/internal/mcp"
"github.com/pomerium/pomerium/internal/telemetry/metrics"
"github.com/pomerium/pomerium/pkg/cryptutil"
"github.com/pomerium/pomerium/pkg/grpc/databroker"
@ -28,6 +29,7 @@ type Authorize struct {
store *store.Store
currentConfig *atomicutil.Value[*config.Config]
accessTracker *AccessTracker
mcp *atomicutil.Value[*mcp.Handler]
tracerProvider oteltrace.TracerProvider
tracer oteltrace.Tracer
@ -37,11 +39,18 @@ type Authorize struct {
func New(ctx context.Context, cfg *config.Config) (*Authorize, error) {
tracerProvider := trace.NewTracerProvider(ctx, "Authorize")
tracer := tracerProvider.Tracer(trace.PomeriumCoreTracer)
mcp, err := mcp.New(ctx, mcp.DefaultPrefix, cfg)
if err != nil {
return nil, fmt.Errorf("authorize: failed to create mcp handler: %w", err)
}
a := &Authorize{
currentConfig: atomicutil.NewValue(cfg),
store: store.New(),
tracerProvider: tracerProvider,
tracer: tracer,
mcp: atomicutil.NewValue(mcp),
}
a.accessTracker = NewAccessTracker(a, accessTrackerMaxSize, accessTrackerDebouncePeriod)
@ -151,4 +160,11 @@ func (a *Authorize) OnConfigChange(ctx context.Context, cfg *config.Config) {
} else {
a.state.Store(newState)
}
mcp, err := mcp.New(ctx, mcp.DefaultPrefix, cfg)
if err != nil {
log.Ctx(ctx).Error().Err(err).Msg("proxy: failed to update authorize state from configuration settings")
} else {
a.mcp.Store(mcp)
}
}