Skip to the content.

ADR-0028: TAXII 2.1 Server

Decision: FastAPI implementation of TAXII 2.1; each GNAT workspace is exposed as a collection under a single gnat API root.

Why workspace-as-collection: TAXII collections map naturally to GNAT workspaces — both are bounded sets of STIX objects with a defined identity. The workspace name becomes the collection ID. Creating a new workspace automatically makes it available as a TAXII collection.

Authentication: TAXII 2.1 requires HTTPS + HTTP Basic auth in production. The server validates credentials against the [taxii] INI section. The discovery endpoint (GET /taxii2/) is intentionally unauthenticated per the TAXII 2.1 spec.

Pagination: GET /collections/{collection-id}/objects/ uses added_after (ISO timestamp) and limit/next link headers per the TAXII 2.1 pagination model. GNAT’s WorkspaceStore.list_objects_after() implements the server-side cursor.

STIX version filtering: The Accept header (application/taxii+json;version=2.1) is enforced; only STIX 2.1 bundles are served. Clients requesting TAXII 2.0 receive a 406 Not Acceptable.


Licensed under the Apache License, Version 2.0