Your identity data stays in Europe
EuroAuth is a managed, EU-hosted OAuth 2.1 and OpenID Connect provider. Every organization gets its own issuer, live within seconds of creating it.
No credit card, because there is nothing to bill yet: EuroAuth is pre-launch and free while it is. You keep every client and user you register.
What you get
Your own issuer
Create an organization and it is reachable at its own hostname immediately. No DNS record to add, no hostname to register with us, no support ticket.
PKCE is required
Not optional, and not a setting you can turn off. An authorization request without an S256 challenge is rejected.
Ed25519 signatures
ID tokens are signed with Ed25519 and published as RFC 8037 OKP keys. There is no RSA anywhere in the dependency tree.
Your own issuer, not a path on ours
This is the document every client library fetches first. Read down it: the hostname in each endpoint is yours, and so is the iss claim in every token minted against it.
A new issuer resolves within thirty seconds. Until it does, its hostname answers 404 rather than serving this document under the wrong issuer — a client that cached the wrong one would fail signature checks long after we had fixed the mistake.
{
"issuer": "https://acme-inc.id.euroauth.com",
"authorization_endpoint": "https://acme-inc.id.euroauth.com/authorize",
"token_endpoint": "https://acme-inc.id.euroauth.com/token",
"userinfo_endpoint": "https://acme-inc.id.euroauth.com/userinfo",
"introspection_endpoint": "https://acme-inc.id.euroauth.com/introspect",
"revocation_endpoint": "https://acme-inc.id.euroauth.com/revoke",
"jwks_uri": "https://acme-inc.id.euroauth.com/jwks",
"response_types_supported": ["code"],
"grant_types_supported": ["authorization_code", "refresh_token"],
"code_challenge_methods_supported": ["S256"],
"subject_types_supported": ["public"],
"id_token_signing_alg_values_supported": ["EdDSA"],
"scopes_supported": ["openid", "profile", "email"],
"token_endpoint_auth_methods_supported": ["none"]
}Three requests from here to a verified token
Send them to your issuer
PKCE is required, not optional — a request without a challenge is rejected.
GET https://acme-inc.id.euroauth.com/authorize ?response_type=code &client_id=web-app &redirect_uri=https://app.example.com/callback &scope=openid%20email &state=OPAQUE_STATE &code_challenge=BASE64URL(SHA256(verifier)) &code_challenge_method=S256Exchange the code
The code is single-use: redemption deletes it in the same statement that returns it, so a replay finds nothing.
POST https://acme-inc.id.euroauth.com/token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code &code=RETURNED_CODE &redirect_uri=https://app.example.com/callback &client_id=web-app &code_verifier=ORIGINAL_VERIFIERVerify the ID token
Signed with Ed25519 and published as an RFC 8037 OKP key. There is no RSA in the dependency tree.
GET https://acme-inc.id.euroauth.com/jwks { "keys": [ { "kty": "OKP", "use": "sig", "alg": "EdDSA", "crv": "Ed25519", "kid": "KEY_ID", "x": "BASE64URL_PUBLIC_KEY" } ] }
Register a client in the next ten minutes
You will need an organization, one client, and a redirect URI. Everything above is what you get for it.
There is no wall of customer logos on this page, because there are no customers yet. EuroAuth is pre-launch: the capabilities marked live above run, the rest are scheduled, and nothing here is a number we made up.