Add Corenexis to your app and your users get Google, GitHub, Microsoft, Facebook, magic-link and password sign-in — with two-factor authentication, a consent screen and device management already built in. You wire up one OAuth 2.0 flow. We handle the identity.
Free · no SDK to install · plain HTTP and JSON
// 1. send the user to Corenexis
res.redirect('https://accounts.corenexis.com/' +
'?redirect=' + encodeURIComponent(CALLBACK) +
'&state=' + state);
// 2. they come back with ?code=…
const tok = await (await fetch(BASE + '/api/token', {
method: 'POST',
body: new URLSearchParams({
grant_type: 'authorization_code',
code: req.query.code,
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
}),
})).json();
// 3. that's it — a verified user
req.session.userId = tok.user.id;
Authentication is the part of an app that is easy to start and expensive to finish. Everything on the left stops being your problem the day you integrate.
Or maintain, or get audited on.
One redirect, one POST, one session.
codeNo SDK, no library, no lock-in — it is standard OAuth 2.0 authorization code, so anything that already speaks OAuth speaks to us.
The browser never sees a secret. Your server does the one exchange that matters.
Send the browser to accounts.corenexis.com/?redirect=… with your callback URL and a state you generated.
The user signs in however they like, approves your app once, and comes back to your callback with a single-use code that lives 60 seconds.
Your server POSTs the code with your client_secret and gets an access token, a rotating refresh token and the user's verified profile.
One button in your app, our sign-in screen, and a verified identity back on your server. Play it through — the third panel is the real shape of the response.
Welcome back — pick how you'd like to continue.
One button. That is the whole integration on your side.
using your Corenexis Account
Shown once per user. Your privacy policy and terms appear here too.
Signed in as Aarav — your app never saw a password.
The button in that first panel is not a mockup — it is the markup below. Copy it, point the link at your authorize URL, and your sign-in screen is done. The mark is served from our servers, so it stays current without you re-exporting anything.
Sign in to YourApp
Welcome back — pick how you'd like to continue.
Secured by Corenexis. Your password is never shared with this app.
<!-- Sign in with Corenexis -->
<a class="cnx-signin"
href="https://accounts.corenexis.com/?redirect=https%3A%2F%2Fyourapp.com%2Fauth%2Fcallback&state=YOUR_STATE">
<img src="https://accounts.corenexis.com/assets/logo/icon-white-theme.webp"
alt="" width="20" height="20">
<span>Continue with Corenexis</span>
</a>
<style>
.cnx-signin{display:inline-flex;align-items:center;justify-content:center;gap:10px;
padding:12px 22px;border:1px solid #dfe3ec;border-radius:10px;background:#fff;
color:#131a35;font-family:inherit;font-size:.95rem;font-weight:600;line-height:1.2;
text-decoration:none;cursor:pointer;
transition:border-color .18s ease,box-shadow .18s ease}
.cnx-signin:hover{border-color:#fe5940;box-shadow:0 6px 18px rgba(254,89,64,.18)}
.cnx-signin:focus-visible{outline:2px solid #fe5940;outline-offset:2px}
.cnx-signin img{width:20px;height:20px}
</style>
<!-- Sign in with Corenexis — for dark backgrounds -->
<a class="cnx-signin cnx-signin--dark"
href="https://accounts.corenexis.com/?redirect=https%3A%2F%2Fyourapp.com%2Fauth%2Fcallback&state=YOUR_STATE">
<img src="https://accounts.corenexis.com/assets/logo/icon-dark-theme.webp"
alt="" width="20" height="20">
<span>Continue with Corenexis</span>
</a>
<style>
.cnx-signin{display:inline-flex;align-items:center;justify-content:center;gap:10px;
padding:12px 22px;border:1px solid #dfe3ec;border-radius:10px;background:#fff;
color:#131a35;font-family:inherit;font-size:.95rem;font-weight:600;line-height:1.2;
text-decoration:none;cursor:pointer;
transition:border-color .18s ease,box-shadow .18s ease}
.cnx-signin:focus-visible{outline:2px solid #fe5940;outline-offset:2px}
.cnx-signin img{width:20px;height:20px}
.cnx-signin--dark{background:#15172a;border-color:#2a2d45;color:#fff}
.cnx-signin--dark:hover{border-color:#fe5940;box-shadow:0 6px 18px rgba(254,89,64,.26)}
</style>
<!-- A whole sign-in screen: Corenexis as the only way in -->
<div class="cnx-card">
<div class="cnx-card-logo">YA</div>
<h1 class="cnx-card-title">Sign in to YourApp</h1>
<p class="cnx-card-sub">Welcome back — pick how you'd like to continue.</p>
<a class="cnx-signin"
href="https://accounts.corenexis.com/?redirect=https%3A%2F%2Fyourapp.com%2Fauth%2Fcallback&state=YOUR_STATE">
<img src="https://accounts.corenexis.com/assets/logo/icon-white-theme.webp"
alt="" width="20" height="20">
<span>Continue with Corenexis</span>
</a>
<p class="cnx-card-note">Secured by Corenexis. Your password is never shared with this app.</p>
</div>
<style>
.cnx-card{max-width:400px;margin:0 auto;padding:38px 30px;text-align:center;
background:#fff;border:1px solid #e6e9f0;border-radius:18px;
box-shadow:0 24px 50px -40px rgba(0,11,54,.5);
font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
.cnx-card-logo{width:52px;height:52px;margin:0 auto 16px;border-radius:14px;
display:grid;place-items:center;color:#fff;font-weight:800;letter-spacing:.04em;
background:linear-gradient(140deg,#3b6fd4,#6b4bd6)}
.cnx-card-title{margin:0 0 6px;font-size:1.22rem;font-weight:700;color:#131a35}
.cnx-card-sub{margin:0 0 22px;font-size:.92rem;color:#5b6580}
.cnx-card-note{margin:18px 0 0;font-size:.8rem;color:#8a93a8}
.cnx-signin{display:inline-flex;align-items:center;justify-content:center;gap:10px;
padding:12px 22px;border:1px solid #dfe3ec;border-radius:10px;background:#fff;
color:#131a35;font-family:inherit;font-size:.95rem;font-weight:600;line-height:1.2;
text-decoration:none;cursor:pointer;
transition:border-color .18s ease,box-shadow .18s ease}
.cnx-signin:hover{border-color:#fe5940;box-shadow:0 6px 18px rgba(254,89,64,.18)}
.cnx-signin:focus-visible{outline:2px solid #fe5940;outline-offset:2px}
.cnx-signin img{width:20px;height:20px}
</style>
Mark files, free to hotlink:
accounts.corenexis.com/assets/logo/icon-white-theme.webp for light surfaces,
icon-dark-theme.webp for dark. A .png of each sits beside it.
Keep the wording “Continue with Corenexis” or “Sign in with Corenexis”,
and please don't recolour or stretch the mark.
Every item here is live on the platform today, for every app, with nothing to switch on.
Google, GitHub, Microsoft, Facebook, magic link and password all resolve to the same Corenexis account — so a user who signed up with a password can later use Google and still be the same person to you.
TOTP with backup codes, replay-protected per RFC 6238 — a code cannot be reused inside its own window. Your app inherits it without a line of code.
Access tokens are RS256 JWTs with a published JWKS and an OpenID discovery document, so your API can verify them without calling us.
Every refresh returns a new token and retires the old one. Presenting a retired token revokes the session instead of issuing more — RFC 9700 §4.14.2.
S256 code challenges are supported and opt-in, which is what makes a custom-scheme callback on Android or iOS safe.
Users approve your app once, see exactly what it receives, and can withdraw access at any time from their Connected apps page — with no support ticket for you.
If it can make an HTTPS request and keep one secret on a server, it can sign users in with Corenexis.
127.0.0.1 is accepted as a callback.Permissions are fixed server-side per app, so a request cannot widen them and a user is never shown a permission your app would not actually get.
| Data | Fields | New apps |
|---|---|---|
| Account ID | id | Always |
| Name & photo | name, avatar_url | Included |
email, email_verified | Included | |
| Country & timezone | country, timezone | Included |
| Phone number | phone_country_code, phone_number | On request |
| Security status | totp_enabled, created_at | On request |
You never receive a password, a 2FA code or a backup code — nothing we send can be used to sign in as that user anywhere else.
Nothing. You can register up to five apps per Corenexis account, and each one gets the full flow — tokens, refresh, userinfo, consent, 2FA. If you need more than five, ask us.
On the identity platform itself: accounts.corenexis.com/developer. Apps are only ever created there — this site is the documentation. You need a Corenexis account with a verified email.
No. If they don't have one they can create it during the sign-in flow, or come in through Google, GitHub, Microsoft or Facebook — which creates the account for them.
It is OAuth 2.0 authorization code with OIDC-style pieces: RS256 ID-style access tokens, a JWKS endpoint and a discovery document. Any OAuth 2.0 client library will work; you don't need an OIDC-certified one.
Yes — register a custom scheme such as com.yourapp.name://auth/callback, use PKCE, and exchange the code through your own backend so the client secret never ships inside the app. Full walkthrough in the docs.
Its refresh tokens stop working immediately and the next refresh returns invalid_grant. Send the user through sign-in again; if they approve, you're reconnected.
Create an app, copy two values into your environment, and have working sign-in this afternoon — with 2FA and social providers your users already trust.
Your users sign in once and carry the same verified identity into every app built on Corenexis — and they can see, review and revoke every one of them from a single place.