An OAuth 2.1 and OpenID Connect authorisation server where every human signs in with a passkey — and every action leaves a trail that can prove it was not altered.
One identity surface for your staff, your customers and everything you ship.
Blackwall is an authentication service for organisations that want a single, auditable, passwordless front door. It speaks the standards your applications already expect — authorisation code with mandatory PKCE, ID tokens, JWKS, UserInfo, introspection, revocation — and authenticates every user with WebAuthn.
Passwords are not merely discouraged. They cannot be enabled. There is no reset flow to socially engineer, no credential-stuffing surface, and no shared secret sitting in somebody's notes app.
The posture, stated plainly.
Four decisions that shape everything else about how Blackwall behaves in production.
I
Passkeys only
Every assertion requires both User Present and User Verification. PIN-less authenticators are rejected, and a regressed sign counter is treated as a cloned credential and refused outright.
WebAuthn
II
One process, one database
A single statically linked Go binary over PostgreSQL. No service mesh, no scheduler tier, no daemon zoo — background work runs in goroutines beside the HTTP server. The schema migrates itself on start-up.
Simple
III
Least privilege, then approval
Three admin roles, per-request scope computed from organisation membership, and an approval workflow for sensitive mutations. An out-of-scope URL returns 403 rather than 404, so guessing is a deliberate signal.
RBAC
IV
Provable history
The audit log is SHA-256 chained under a transaction-scoped lock, so concurrent writes serialise and tampering is detectable. Exports finish with an HMAC-signed manifest line.
Evidence
What you get.
An identity provider, an administration console, a licensing service and a secure-sharing tool — all in the same deployment, all under the same audit trail.
01
Standards
OAuth 2.1 and OpenID Connect, done properly.
Authorisation code with mandatory PKCE (S256), refresh tokens that are single-use with token-family revocation, and ID tokens carrying at_hash, auth_time and enforced max_age reauthentication.
Discovery, JWKS, UserInfo
Revocation (RFC 7009), introspection (RFC 7662)
RS256 signing, with pluggable KMS-backed keys
02
Authentication
Passkeys, verified server-side.
CBOR and COSE attestation parsed and checked in-process, ES256 and RS256 supported, platform authenticators, roaming security keys and synced passkeys all welcome.
One-time enrolment links, hashed at rest
Sign-counter regression rejected
No password path exists to fall back to
03
Claims
Say what your applications need to hear.
Custom OIDC claims merged at four layers — organisation, project, user, and user within a project — landing in every ID token and UserInfo response without a bespoke integration.
Typed values: numbers, booleans, JSON, strings
Reserved claim names blocked at write and again at signing
Provenance shows which layer supplied each value
04
Administration
A console that assumes people make mistakes.
Organisations, projects, privilege ladders and per-user assignments, with super-admin, operator and auditor roles — and an approval workflow standing between an operator and anything sensitive.
Status changes, credential deletions and client settings gated
Ed25519-signed licence envelopes bound to an exact hostname, issued to a person or a business, carrying feature and instance claims — with online verification, revocation and key rotation built in.
Public-key registry published for offline checking
Renewal reminders at 30, 14, 7, 2 and 1 days
Exact hostnames instead of ambiguous wildcards
06
CryptBin
Share a secret without handing it over.
End-to-end encrypted blob storage: payloads are encrypted in the browser with AES-256-GCM, and the server only ever holds ciphertext and a wrapped key it cannot use alone.
XChaCha20-Poly1305 key wrapping, bound to the blob ID
Optional per-item passkey binding
No more secrets pasted into chat threads
07
Federation
For the systems that cannot speak OIDC.
A SAML 2.0 identity provider for legacy applications, SCIM 2.0 provisioning from your HRIS, and outbound webhooks with exponential backoff for everything that needs to react.
Workday, Okta and Entra ID as provisioning sources
Event-driven integration without polling
One user record behind all of it
08
Operations
Runs quietly, tells you everything.
Prometheus-compatible metrics, optional outbound push of every audit event, server-backed sessions, scheduled maintenance jobs and documented backup and recovery.
Tamper-evident chain checkpoints
Signed CSV audit exports
Vulnerability-scan provenance shown to admins, findings withheld
09
Automation
Configure it the way you configure everything else.
A JSON admin API with bearer-token authentication, a Terraform provider, and CI/CD patterns for keeping identity configuration in the same repository as the applications that depend on it.
Declarative upsert and delete
Per-project feature flags
Branding and custom domains per organisation
10
Self-service
A portal, so support does not become the bottleneck.
End users manage their own passkeys — add a second device, retire a lost one, see what is enrolled — without an administrator touching a credential or an approval queue filling up with routine work.
Enrolment by one-time link
Authentication sandbox for developers testing a flow
Worked integrations for Node, Python, PHP, Go and SPAs
11
Deployment
Nothing to assemble on the day.
Templates, stylesheets and assets are compiled into the executable, so there is no asset pipeline to run and no static directory to get out of step with the version you deployed.
Migrations are forward-only and idempotent, tracked in the schema
Compose file, systemd unit and reverse-proxy vhosts all included
Admin console publishable on a hostname of its own
12
Hardening
The unglamorous defences, actually in place.
Client secrets and enrolment tokens are stored as hashes and compared in constant time. Sessions are encrypted and authenticated server-side. None of this is interesting until the day it is the only thing standing there.
AES-256 sessions, HttpOnly, Secure, SameSite=Lax
Single-use HMAC CSRF tokens, held inside the encrypted session
Rate limiting and audit context sit in the middleware chain
Standards posture, without the hand-waving
Blackwall documents what it implements today, what the known gaps are, and how to run the OIDC conformance suite against your own deployment. We would rather tell you where the edges are than let you discover them during an integration.
The same flow your framework's OIDC client already speaks — with the password step replaced by something that cannot be phished.
I
Enrol
The user follows a one-time link and registers a passkey. The database stores a hash of the token, never the token itself.
Enrol
II
Authorise
Your application redirects to /oauth/authorize with a PKCE challenge. Blackwall asks for the passkey; the authenticator asks for the finger, face or PIN.
Assert
III
Exchange
The code is exchanged at /oauth/token for an access token and an ID token — with your custom claims already merged in from all four layers.
Tokens
IV
Account for it
Every step lands in the chained audit log. Months later, an auditor can export it, verify the chain and see exactly who did what and who approved it.
Audit
Consider Blackwall when…
01You want passwords gone, not merely behind a second factor.
02Your auditors want proof the log was not edited afterwards.
03You ship licensed software and need signed, revocable entitlements.
04You are paying per-user rates for an identity platform you barely use.
05You need a SAML shim for one stubborn legacy application.
06You would rather run one binary than operate a fleet of services.
Questions worth asking.
What happens when someone loses their phone?
They authenticate with another enrolled passkey and retire the lost one from the portal themselves. Where no second credential exists, an administrator issues a fresh one-time enrolment link — a capability that is itself gated and audited, rather than a quiet reset.
Do I have to rewrite my applications?
No. Blackwall speaks standard OAuth 2.1 and OpenID Connect, so most frameworks need a client ID, a secret and a discovery URL. The manual carries worked examples for Node with Express, Python with Flask, PHP, Go and a vanilla-JavaScript single-page app, plus guidance on choosing between server-side, SPA and backend-for-frontend patterns.
How is it deployed?
A single Go binary, or the supplied container image, against PostgreSQL 14 or later. TLS terminates at a reverse proxy you already run; reference nginx and Apache configurations and a systemd unit are included. An empty database is fine — the baseline schema installs itself on first start.
What makes the audit log trustworthy?
Entries are SHA-256 chained, each committing to the one before it, written under a transaction-scoped advisory lock so concurrent writes serialise correctly. Alter a row and the chain no longer verifies. CSV exports end with an HMAC-signed manifest line, and periodic checkpoints give you fixed points to verify against.
Can it act as the licence server for our own product?
Yes — that is what project licences are for. Licences are Ed25519-signed envelopes bound to an exact hostname and carrying your feature and instance claims. There is a normative verification guide with PHP, Go, Rust and Java examples, and it is emphatic on one point: decoding a licence is never the same as verifying it.
Also from Alchementary.
Independent products, built because they should exist.
01
4ensics Leviathan
Drop a file. See everything.
A complete binary analysis, reverse-engineering and digital-forensics workbench, running inside a browser tab with your artefacts kept local.
Hybrid lattice key agreement, identities that cannot be written unprotected, and files that stay private long after today's cryptography stops being enough.
Tell us about your applications, your users and the audit obligations you are working to — we will tell you honestly whether Blackwall is the right fit.