Skip to content

🧪 Beta — Available today; the interface contract may still change.

Connect Authing

This page covers how to configure Authing as GenAuth's Human IAM provider. The integration maps one-to-one onto the three capability surfaces in F1 Integration principles: directory reads (who the user is), federated login (confirming consent with an enterprise account), and permission evaluation (what the user can do).

By the end of this guide you will:

  • Understand how the Authing provider integrates — what OIDC federated login solves, and what directory and permission reads solve
  • Configure the tenant and access credentials, then verify that user directory binding takes effect on delegation issuance
  • Know what to watch for under a self-hosted same-domain sidecar deployment

Integration at a glance

Capability surfaceQuestion it answersStatus
User directory bindingDoes the delegating user actually exist in the directory🧪 Beta (in effect on every delegation issuance)
OIDC federated loginWhich account does the user sign in with at consent time🚧 Roadmap
Directory / permission readsThe person's real permissions — the attenuation floor of the three-way intersection🚧 Roadmap

Prerequisites

  • On the GenAuth side: a tenant and access credentials (AK/SK). Creating and rotating tenants and credentials goes through the /api/v3/eak/tenants family of endpoints; see API Reference for the full contract.
  • On the Authing side: a user pool (user directory) that serves as the authoritative source for users.
  • Differences by deployment model: in the SaaS model the delegation user directory is hosted on the tenant side, so directory binding works out of the box. In the self-hosted same-domain sidecar model the directory authority is the Authing instance inside your domain — the rest of this page follows the self-hosted sidecar as its main line. For the differences, see Deployment models.

Bind the user directory: delegation starts by confirming the person exists

Directory binding is the Authing provider surface that is live today. Once you bind a user directory during tenant initialization, every user in every delegation request resolves against that directory as the authority. Before issuance, GenAuth verifies that the delegating user really exists in the directory; a user who does not exist gets no Delegate Token at all.

Your code does nothing extra: start the delegation as usual, and the directory check happens inside GenAuth.

ts
import { Qoni, AnimaScopes } from "@eazo/anima";

const anima = new Qoni({
  host: "https://api.eak.eazo.ai",
  accessKey: process.env.ANIMA_ACCESS_KEY!,
  secretKey: process.env.ANIMA_SECRET_KEY!,
});

// Start an interactive delegation for a real user in the directory
const { data } = await anima.delegateToken({
  mode: "interactive",
  agent: "report-agent",
  scopes: [AnimaScopes.WEB_SEARCH_RUN, AnimaScopes.WEB_SEARCH_READ],
  redirectUri: "https://yourapp.example.com/callback",
  state: "opaque-state",
  user: { id: "usr_demo_0001" }, // use the user identifier from your directory
});
// data.authorizationUrl — hand this to the user to complete consent

For the whole delegation loop (callback, getting the token, token exchange), see Your first delegation in 30 minutes.

Configure OIDC federated login

🚧 Roadmap — The capability described here is on the roadmap. The concepts and design are settled; interfaces and steps are subject to the final release.

Federated login solves the "front door" of the consent screen: when the user opens it, they are redirected to Authing to authenticate with their enterprise account, and the identity assertion returns to GenAuth — so the person at the consent screen and the person in the directory are the same person. This is hop ⑧ of the full journey:

Useremployee / end userGenAuthdeployed in your environmentHuman IAMyour existing identity system⑧ Identity federation: sign in with your existing enterprise account (OIDC)Federated login redirectAuthenticate with the enterprise accountIdentity assertion(Alice = the Alice in your directory)

The integration uses the standard OIDC authorization code flow. When it ships, you will prepare an OIDC application on the Authing side and hand GenAuth the following conceptual parameters (the exact configuration entry point is subject to the final release):

Conceptual parameterWhat it does
IssuerLets GenAuth discover Authing's OIDC endpoints
Application ID / application secretGenAuth's identity as an OIDC client
Redirect URIWhere the identity assertion returns to GenAuth after authentication
Requested scope (openid profile, etc.)Decides which basic claims the identity assertion carries

Until federated login ships, sign-in on the consent screen is completed against the user directory session inside GenAuth's own domain.

Configure directory / permission reads

🚧 Roadmap — The capability described here is on the roadmap. The concepts and design are settled; interfaces and steps are subject to the final release.

Permission reads answer the "person's real permissions" set in the three-way intersection (for the mechanism, see F1 layer 2 and Delegate Token and attenuation). How it integrates: through the provider, GenAuth evaluates the user's permission assertions in the Authing directory (roles, groups, permission points) read-only, and the assertion is used only to narrow the delegation, never written back. The three hard boundaries match F1: read-only, real-time, intersect without widening.

Self-hosted same-domain sidecar: what to watch for

In the self-hosted model, GenAuth is deployed as a microservice component alongside Authing in the same Kubernetes namespace (for the full topology and boundary matrix, see Deployment models). Keep your eye on four things:

  • Traffic never leaves the domain — federated redirects and directory/permission reads all stay on in-domain traffic; user credentials and permission data never cross your boundary.
  • Same-domain callbacks — keep the consent screen and the Authing login page on the same domain or mutually trusted domains, so cross-domain redirects do not get blocked by enterprise browser policy.
  • Credential boundary — all GenAuth holds is a read-only credential aimed at the provider. Service-to-service authentication (mTLS, secret management) follows the service-to-service authentication matrix in G2.
  • Air-gapped works — in an offline deployment, provider integration also completes entirely inside your domain, with no external dependency.

Verify

Once the delegation loop completes, use the released SDK's introspection call to check who the token belongs to:

ts
const info = await anima.genauth.introspectDelegationToken({ token });
// Check: sub (the person, from your directory), agent_id, scope, grant_id, audit_id

sub should point at the user in your directory who granted the authorization — that is the direct evidence that directory binding is in effect. For the full claim table, see Token and claim reference.

FAQ

Do I have to migrate my users into GenAuth? No. Directory authority stays in your Authing user pool. GenAuth only reads and verifies; it never takes over and never writes back. This is what F1 means by "connecting is not migrating".

Delegation issuance says user validation failed. Why? First check that user.id comes from the directory you bound — the most common cause is starting a delegation with a user identifier from a different system. GenAuth rejects users that do not exist in the directory before issuance.

Can I configure federated login today? Not yet; that section is Roadmap. For now, sign-in on the consent screen is completed against the user directory session inside GenAuth's own domain. After release, redirecting to Authing for enterprise-account authentication will be supported.

I do not use Authing. What then? See F3 for how Azure AD (Entra ID), Okta, and standard OIDC integrate — the provider abstraction guarantees they all speak the same integration language.

Next steps