stacklok / stacklok/toolhive

Add SPIFFE interoperability, security, and end-to-end coverage

Open
#6,206 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

authentication authorization enhancement go
Dominant language
Go
Stars
2.2k
Forks
300
Avg merge
1d 15h
Merged PRs (30d)
184

Description

Description

Verify both authentication methods against real SPIRE infrastructure and
ToolHive's deployed configuration, and document the threat model and
operational failure modes.

Unit tests with hand-rolled certificates and self-signed JWTs will not catch
the failures that matter here. The interesting bugs live in the gap between what
SPIRE actually issues and what the validator assumes — SAN shapes, key usage,
bundle rotation timing, audience handling — so the positive paths must run
against credentials SPIRE minted.

Scope

  • Add table-driven parser, validator, policy and client-authentication tests.
  • Add real TLS and JWT-SVID integration tests.
  • Add an end-to-end SPIRE deployment and test matrix.
  • Document the threat model, supported configuration, rotation behaviour and
    operational failure modes.

Acceptance criteria

Positive paths, against real SPIRE-issued credentials:

  • X.509-SVID and JWT-SVID authentication both succeed.
  • Both methods produce equivalent grants and Cedar authorization decisions for
    the same SPIFFE ID.

Negative and boundary coverage:

  • Malformed and additional URI SANs
  • Invalid X.509 chains and wrong key usage
  • Wrong trust domains
  • Missing or mismatched client IDs
  • Expired JWT assertions
  • Incorrect or multiple JWT audiences
  • Wrong JWT keys, key IDs and algorithms
  • OIDC token / JWT-SVID type confusion
  • Bundle rotation, key removal, and cross-trust-domain mix-up
  • Exact and wildcard client-association boundaries
  • All four client shapes: public, secret-confidential, X.509-SVID, JWT-SVID
  • client_credentials and RFC 8693 token exchange
  • Restart and persisted-association behaviour

Discovery:

  • Metadata verified for X.509-only, JWT-only and combined configurations.
  • Public-only deployments' metadata is unchanged.

Documentation:

  • Threat model covers CA or signing-key compromise, Bundle Endpoint compromise,
    assertion replay, TLS termination, and Workload API socket access.
  • Production deployment and troubleshooting documentation is complete.

Dependencies

  • Sub-issue 6 (SPIRE and operator deployment integration) — the E2E matrix needs
    the deployable path

Related

  • Part of the SPIFFE client-authentication epic

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing Sub-issue 6, since the end-to-end matrix depends on the deployable SPIRE and operator integration path. Then map the existing SPIFFE client-authentication behavior against the listed positive, negative, discovery, and documentation acceptance criteria; done means real SPIRE-issued credentials, deployment coverage, and complete operational guidance are all verified.

Written by the indexing model from the issue text.

Assessment

Tech stack
go
Domain
authentication, devops, documentation, security, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.