Repository navigation
Troubleshooting
Preflight failed on a critical check (❌). Read logs:
docker compose logs ssf-transmitter --tail 100(Compose service name is ssf-transmitter; container name is authentik-ssf — either works with docker logs authentik-ssf.)
Common causes:
| Log message | Fix |
|---|---|
SSF_ISSUER / SSF_BASE_URL not HTTPS |
Use https:// URLs |
SSF_MANAGEMENT_TOKEN too short |
Min 32 characters |
SSF_WEBHOOK_TOKEN missing in bearer mode |
Set token or switch mode |
| Database not writable | Fix volume permissions on /app/data
|
Undecryptable receiver tokens produce ⚠️ and pause streams — startup continues.
You rotated SSF_MANAGEMENT_TOKEN or added SSF_TOKEN_ENCRYPTION_KEY after the stream was created.
- Get a new receiver token from your SSF receiver (ABM).
-
PATCH /ssf/streamswithdelivery.endpoint_url_tokenandstatus: enabled. - Example body:
{
"status": "enabled",
"delivery": {
"endpoint_url": "https://receiver.example.com/sets",
"endpoint_url_token": "<new receiver token>"
}
}- Or delete and re-create the stream.
No stream configured. Register via POST /ssf/streams or ABM onboarding.
Since v0.5.9 you cannot set status: enabled without a valid receiver token. Supply delivery.endpoint_url_token in the same PATCH.
- Check stream status is
enabled. - Check Authentik webhook fires (test notification).
- Check webhook auth:
SSF_WEBHOOK_AUTH_MODE=bearerand Header Mapping in Authentik. - Check logs for
delivered/failedonPOST /webhook/authentik. - Verify receiver URL still passes SSRF validation and allowlist (
SSF_ALLOWED_RECEIVER_HOSTS).
Verification SET delivery to receiver failed. Stream is rolled back. Check receiver URL, token, and network egress.
Missing or malformed Authorization: Bearer header.
Wrong SSF_MANAGEMENT_TOKEN.
Rate limit exceeded (failed auth or stream PATCH/create limits). Wait one minute or check if a scanner is hitting the API.
This endpoint now requires management Bearer token:
curl -H "Authorization: Bearer $SSF_MANAGEMENT_TOKEN" \
https://idp.example.com/shared-signals/apple-scim/statusOAuth /apple-scim/authorize and /callback remain public.
-
Bearer mode: Header Mapping must send
Authorization: Bearer <SSF_WEBHOOK_TOKEN>. -
HMAC mode:
SSF_WEBHOOK_AUTH_MODE=hmacand matchingSSF_WEBHOOK_SECRET.
Authentik action has no SSF mapping. See Event-Mapping.md.
Set SSF_FORWARDED_ALLOW_IPS to your reverse proxy subnet. Default 127.0.0.1 ignores X-Forwarded-For from NPM.
Check SSF_ROOT_PATH matches nginx location (/shared-signals) and SSF_BASE_URL includes the same path.
All of APPLE_SCIM_CLIENT_ID, APPLE_SCIM_CLIENT_SECRET, AUTHENTIK_URL, AUTHENTIK_TOKEN must be set.
See changelog for 409 recovery rules. Use APPLE_SCIM_GROUP_ID to limit scope.
curl -s https://idp.example.com/shared-signals/.well-known/ssf-configuration | jq .
curl -s -H "Authorization: Bearer $SSF_MANAGEMENT_TOKEN" \
https://idp.example.com/shared-signals/ssf/status | jq .