diff --git a/cmd/cocoon/main.go b/cmd/cocoon/main.go index acc96ea..1a9265b 100644 --- a/cmd/cocoon/main.go +++ b/cmd/cocoon/main.go @@ -6,6 +6,7 @@ import ( "crypto/rand" "encoding/json" "fmt" + "log/slog" "os" "time" @@ -180,7 +181,7 @@ var runServe = &cli.Command{ Flags: []cli.Flag{}, Action: func(cmd *cli.Context) error { - logger := telemetry.StartLogger(cmd) + logger := telemetry.StartLogger(cmd, telemetry.WithLevel(slog.LevelWarn)) telemetry.StartMetrics(cmd) s, err := server.New(&server.Args{ diff --git a/oauth/provider/client_auth.go b/oauth/provider/client_auth.go index 1e4a620..4077fa6 100644 --- a/oauth/provider/client_auth.go +++ b/oauth/provider/client_auth.go @@ -6,6 +6,8 @@ import ( "encoding/base64" "errors" "fmt" + "log/slog" + "strings" "time" "github.com/golang-jwt/jwt/v4" @@ -25,25 +27,40 @@ type AuthenticateClientRequestBase struct { } func (p *Provider) AuthenticateClient(ctx context.Context, req AuthenticateClientRequestBase, proof *dpop.Proof, opts *AuthenticateClientOptions) (*client.Client, *ClientAuth, error) { - client, err := p.ClientManager.GetClient(ctx, req.ClientID) - if err != nil { - return nil, nil, fmt.Errorf("failed to get client: %w", err) + var c *client.Client + var err error + + slog.Warn("client ID", "is", req.ClientID) + + if !strings.Contains(req.ClientID, "localhost") { + c, err = p.ClientManager.GetClient(ctx, req.ClientID) + if err != nil { + return nil, nil, fmt.Errorf("failed to get client: %w", err) + } + } else { + c = &client.Client{ + Metadata: &client.Metadata{ + ClientID: req.ClientID, + TokenEndpointAuthMethod: "none", + DpopBoundAccessTokens: true, + }, + } } - if client.Metadata.DpopBoundAccessTokens && proof == nil && (opts == nil || !opts.AllowMissingDpopProof) { + if c.Metadata.DpopBoundAccessTokens && proof == nil && (opts == nil || !opts.AllowMissingDpopProof) { return nil, nil, errors.New("dpop proof required") } - if proof != nil && !client.Metadata.DpopBoundAccessTokens { + if proof != nil && !c.Metadata.DpopBoundAccessTokens { return nil, nil, errors.New("dpop proof not allowed for this client") } - clientAuth, err := p.Authenticate(ctx, req, client) + clientAuth, err := p.Authenticate(ctx, req, c) if err != nil { return nil, nil, err } - return client, clientAuth, nil + return c, clientAuth, nil } func (p *Provider) Authenticate(_ context.Context, req AuthenticateClientRequestBase, client *client.Client) (*ClientAuth, error) {