Sign inSign up

solarssk/ssf-transmitter

By solarssk

β€’Updated 13 days ago

Self-hosted Shared Signals Framework bridge for Authentik.

Image
Security
Integration & delivery
0

2.8K

solarssk/ssf-transmitter repository overview

⁠SSF Transmitter

Self-hosted Shared Signals Framework bridge for Authentik. Pushes real-time session-revoked and credential-change events straight to Apple Business Manager, or any SSF receiver, no SaaS relay in between.

Full documentation, source, and the Wiki live on GitHub: github.com/solarssk/ssf-transmitter⁠.

⁠What it does

Standalone service that sits next to Authentik and forwards user security events (logout, password change) to receivers implementing the OpenID Shared Signals Framework. It exists so that pushing SSF events out of Authentik doesn't mean building and maintaining that integration yourself, or paying for a relay you don't control.

There's no admin UI: everything is configured through environment variables, and one container runs one active SSF stream at a time. Registering a new receiver replaces the existing stream. An optional background loop can also keep an Apple Business Manager user directory in sync via SCIM.

⁠How it works

  1. Authentik fires a webhook on logout or password change.
  2. The event is mapped to a CAEP session-revoked or credential-change type.
  3. It's signed as an RS256 JWT (a Security Event Token).
  4. The signed SET is pushed over HTTPS to every enabled stream's receiver.

⁠Features

FeatureWhat it does
πŸ“‘SSF discovery and JWKSStandard .well-known/ssf-configuration and jwks.json so receivers auto-discover and verify signatures.
πŸ› οΈStream management APICreate, read, update, and delete the single active SSF stream over a management Bearer token.
πŸ—ΊοΈCAEP event mappingLogout and password-change Authentik events map to session-revoked and credential-change SETs.
✍️RS256-signed deliveryEvery push is revalidated against SSRF and DNS-rebinding checks right before it goes out.
πŸ”’Encrypted receiver tokensFernet-encrypted at rest; management and webhook tokens never touch disk.
πŸ•΅οΈPII masked by defaultEmail addresses are pseudonymised in logs unless explicitly opted out.
πŸ‘₯Apple SCIM user syncOptional directory sync from Authentik to Apple Business Manager, scoped to a single group if you want.

⁠Stack

LayerTechnologies
🐍RuntimePython 3.14, FastAPI + Uvicorn
πŸ—„οΈStorageSQLite via aiosqlite
πŸ”Cryptocryptography (RS256 JWT signing, Fernet token encryption)
πŸ›‘οΈCI/CD securityCodeQL, Trivy (CRITICAL gate), SonarCloud, pip-audit, CycloneDX SBOM per platform

⁠Quick start

docker run -d \
  -p 8000:8000 \
  -v ssf-keys:/app/keys \
  -v ssf-data:/app/data \
  -e SSF_ISSUER=https://idp.example.com/shared-signals \
  -e SSF_BASE_URL=https://idp.example.com/shared-signals \
  -e SSF_MANAGEMENT_TOKEN=<openssl rand -hex 32> \
  -e SSF_WEBHOOK_TOKEN=<openssl rand -hex 32> \
  solarssk/ssf-transmitter:latest

Full deployment guide (Docker Compose, Nginx Proxy Manager, Authentik webhook setup): docs/Deployment.md⁠.

⁠Image tags

solarssk/ssf-transmitter:X.Y.Z   # pinned release, e.g. 0.5.12
solarssk/ssf-transmitter:latest  # tracks the most recent stable release

Multi-arch manifest (linux/amd64 + linux/arm64) β€” Docker pulls the one matching your host automatically. Every image passes a Trivy CRITICAL-vulnerability gate before it's pushed, and the same content is also published to ghcr.io/solarssk/ssf-transmitter (private; docker login ghcr.io required).

⁠License

MIT⁠

Tag summary

Content type

Image

Digest

sha256:0b87313ec…

Size

59.5 MB

Last updated

13 days ago

docker pull solarssk/ssf-transmitter