Skip to content
Udibo

Identity that fits the way your app works.

Hosted sign-in, organizations, and permissions, designed together. Give people a place in your app, and the right access when they get there.

AcmeDesign studioDana

Welcome back, Dana.

One account. A different role in each workspace.

Choose a workspace

Editor in Design studio

Read a document
Allowed
Publish a document
Allowed
Invite a teammate
Allowed
Inspect the example token
{
  "iss": "https://acme.udibo.com",
  "sub": "5d2c1e7a-…",
  "email": "[email protected]",
  "email_verified": true,
  "org_id": "7c0a9b3e-…",
  "org_slug": "design-studio",
  "org_roles": [
    "editor"
  ],
  "roles": [
    "billing"
  ]
}
Static example: Design studio. Enable JavaScript to switch workspaces. Your app defines the permissions; Udibo resolves the roles in the selected organization; your server enforces the decision.

One integration, three foundations

Recognize the person

Passwords, social accounts, email codes, or magic links, with authenticator MFA and recovery codes, on hosted pages that carry your name, logo, and accent color.

Give them a place

Group customers into organizations with invitations, memberships, and roles. One person can belong to several, with different access in each.

Resolve what they can do

Define permissions in your app's own words. Assign roles across a tenant, inside an organization, or on one resource. Read tenant and organization roles from the token, and check resource grants with the API.

Branding

Your sign-in page, not ours

Hosted pages carry your name, logo, and accent color, with no Udibo watermark. People sign in to your product, not to a vendor.

Acme

Sign in to Acme

New to Acme? Create an account

Static example: teal. Enable JavaScript to try other accent colors.

How an integration works

Udibo speaks OAuth 2.0 and OpenID Connect, so standard clients connect. For Hono and React, the @udibo/oauth2 package gives you the backend and browser client.

  1. 1.

    Register your application

    Create a tenant, register your callback URL, and copy the client ID and issuer from the dashboard.

  2. 2.

    Send people to your hosted pages

    Udibo handles accounts, MFA, recovery, and email, then returns the browser to your callback with an authorization code.

  3. 3.

    Enforce access in your backend

    Your API validates the access token and reads the person's organization and permissions. Your app still decides who reaches each record.

TypeScript
const client = new DirectClient({
  issuer: required("AUTH_ISSUER"),
  clientId: required("AUTH_CLIENT_ID"),
  clientSecret: required("AUTH_CLIENT_SECRET"),
  redirectUri: required("AUTH_CALLBACK_URL"),
});

const bff = new HonoBff({
  client,
  sessionStore: sessions,
  authRequestStorage: new EncryptedCookieAuthRequestStorage({
    secret: required("AUTH_REQUEST_SECRET"),
  }),
  resourceServer,
  scope: required("AUTH_SCOPES"),
  defaultReturnTo: "/",
});

const app = new Hono();
app.route("/auth", bff.routes());
app.use("/api/*", bff.protect());

From the Use Udibo guide: sign-in routes at /auth, and every /api route needs a session.

Protection that starts on, and stays yours to tune

Hosted sign-in starts with breached-password checks, lockout, and rate limits switched on. Adjust each policy from your tenant's Security page, and use monitor mode to see what protection would refuse before it blocks anyone.

Breached passwords refused

New passwords are checked against Have I Been Pwned by k-anonymity, so only a short hash prefix leaves Udibo.

Lockout that reveals nothing

Repeated wrong passwords lock the account and hit a rate limit, and a locked account gets the same answer as a wrong password.

A way back in

A locked-out person is emailed a one-time unlock link, or can reset their password from the sign-in page.

Monitor before you enforce

One tenant-wide switch records what attack protection would refuse — lockout, the sign-in rate limit, per-account email limits, MFA throttling, breached-password checks — as audit events, without blocking anyone.

Session lifetimes

Choose how long a sign-in lasts, how long remember-me holds, and when an idle session ends.

Bot challenges

Add a Cloudflare Turnstile challenge to your hosted sign-up, sign-in, and password-reset forms.

Agent-ready

Built for the agents writing your code, and the ones you ship

Hand your coding agent docs it can read and a brief it can follow. When you build an MCP server, protect its tools with the same organizations and permissions as your app.

A brief your agent can follow

Paste the integration brief and your agent starts on the hosted path, with a definition of done, instead of writing its own password storage.

Docs in plain text

llms.txt indexes every guide, llms-full.txt files carry the identity and package docs in one response each, and any guide is Markdown by adding .md to its URL.

Typed package reference

Every exported subpath and signature of @udibo/oauth2 on JSR, so an agent calls the API that exists rather than one it guessed.

Text
Add authentication to this application using Udibo Identity.

Integration path: managed identity service.
Read https://www.udibo.com/llms.txt first.
Keep tokens and client secrets on the backend. Preserve PKCE, state, and CSRF.
Prove sign-in, refresh, logout, and refusal of unauthorized API requests.

An excerpt of the agent brief. The full version adds your framework, callback URLs, and identity mapping.

Protect an MCP server with Udibo

The MCP server starter checks each access token locally and answers with protected-resource metadata, so clients discover your tenant on their own. Give someone a role with write access and their agent can add notes; leave it out and it can only read.

notes.example.com/mcpDana in Northwind

Role you grant Dana

Tools Dana's MCP client is offered

team_notesnotes:read
Granted
add_team_notenotes:write
Not granted
Static example: Reader. Enable JavaScript to switch roles. You choose which permissions each role carries; the server offers only the tools those permissions cover.

Common questions

The answers we would want before choosing an identity provider.

What is available today?

Available now

  • Password, social, email-code, and magic-link sign-in
  • Authenticator-based MFA and recovery codes
  • Organizations, invitations, and roles
  • Permissions across a tenant, an organization, or a resource
  • Webhooks and an exportable audit log
  • Self-service directory export
  • Your branding, with no Udibo watermark

Not available yet

  • Hosted passkeys
  • SAML federation
  • SCIM provisioning
  • Custom domains for hosted pages
How do I get access?

Join the waitlist and you will get an email invitation when your spot opens. Before you launch, work through the production checklist and confirm support expectations with Udibo.

What does it cost?

Every released self-service feature is included on Free, with no enterprise upsell for features like MFA or the audit log. Paid plans add capacity as your usage grows.

Can I try it without an account?

Yes. The @udibo/oauth2 package quickstart runs the same sign-in flow against a local identity provider.

Can I move an existing app?

Yes. Keep your product and its data: map identities, test with a small cohort, and switch in stages with a rollback plan. Plan your migration.

What happens if I leave?

Export your directory when you need to move. Your app speaks standard OAuth 2.0 and OpenID Connect, so another provider can take its place.

Start free, grow with usage

Every released self-service feature is included on Free. Paid plans add capacity when your app needs more room.

Free, every month

Monthly retained users
500
Hosted permission checks
25,000
Emails sent by Udibo
1,000