Skip to content

Social and enterprise sign-in

Let people sign in with Google, Microsoft Entra ID, GitHub, Apple or any OpenID Connect provider, while your app keeps receiving ordinary Authio tokens.

Authio acts as a broker. To your app, a sign-in through Google or a company directory is an ordinary Authio sign-in: the same authorization request, the same code, tokens issued by the realm for a local account. Behind the scenes Authio sends the person to the provider, validates what comes back and decides which account of the realm it belongs to.

You register a provider once per realm, then choose which clients show it on their sign-in screen and in what order. Your app needs no change to gain a new way in.

Supported providers

TypeProtocolIdentity read fromYou provide
GoogleOpenID ConnectThe provider’s validated ID tokenClient ID and secret
Microsoft Entra IDOpenID ConnectThe provider’s validated ID tokenClient ID, secret and the tenant’s authority
GitHubOAuth 2.0The profile API and the primary verified e-mailClient ID and secret
AppleOpenID ConnectThe provider’s validated ID token, returned by form postClient ID, Team ID, Key ID and the .p8 private key
OpenID ConnectOpenID ConnectThe provider’s validated ID tokenClient ID, secret and the authority

Google, Microsoft Entra ID, GitHub and Apple are presets: their endpoints, scopes and claim names are already known. The generic OpenID Connect type reads its endpoints from the authority, the base address where the provider publishes its discovery document, so it fits Okta, Auth0, Keycloak, another Authio realm or any compliant directory.

Federation runs over OpenID Connect and OAuth 2.0. SAML identity providers are not supported.

Add a provider

  1. Register the provider in Authio

    Open Identity Providers and choose Create. Pick the realm and the type, then give it the button label people will see. The alias is derived from the name and becomes part of the callback address; neither the alias nor the type can change after the provider is registered.

  2. Register Authio at the provider

    In the provider’s own console, create an OAuth or OIDC application and register the callback address. The provider’s view in Authio shows it, ready to copy:

    Callback addressPlain text
    https://authio.api.hyperio.tech/realms/acme/broker/google/callback
  3. Fill in the credentials and the linking mode

    Paste the client ID and secret the provider issued (for Apple, the Team ID, Key ID and private key). For Microsoft Entra ID and generic OpenID Connect, enter the authority. Then choose how accounts are linked.

    The secret is written once and never shown again. Authorities and endpoints that point to a private network — a non-public IP, localhost, .local or .internal names — are refused when you save.

  4. Offer it on a client

    Registering a provider makes it available to the realm; offering it makes it visible. In Clients, open the client, choose Edit and go to Sign-in options: offer the providers you want and put them in order. The list is saved as a whole.

  5. Try it

    Start a sign-in from your app. Under the sign-in button, the hosted login now shows Continue with Google, or whatever label you chose.

When an authorization request names an organization, the sign-in shows that organization’s providers, in its order, instead of the client’s.

Account linking and new accounts

The first time someone arrives through a provider, Authio has to decide whose account they land in. An identity already linked to an account is always honoured first — even if the e-mail changed at the provider. For an identity it has never seen, the provider’s Account linking mode decides:

ModeWhat happens to an unknown identity
Only linked accountsRefused. Only identities already linked to an account of the realm get in. The provider proves who someone is; it does not decide that they belong.
Always create a new account (default)A new account is created and linked. It never touches an existing account: if the e-mail is already taken and the realm requires unique e-mails, the sign-in is refused.
Link on verified emailSigns the person into the existing account with the same e-mail — only when Trust this provider’s verified-email claim is on and the provider states it verified the address. Otherwise nothing is linked and it behaves like creating an account.
Linking on e-mail is exactly as safe as the provider’s verification. If a provider lets someone claim an address without proving it, anyone could register a victim’s address there and reach the account here. Turn on the trust setting only for providers that prove control of the address.

Accounts created on first sign-in

  • The account is created without a password and linked to the client the person came through. The user_created webhook is published.
  • It counts toward the user quota of the plan that owns the realm. With no room left, the sign-in is refused with a message the person understands.
  • The username is the provider’s username, or else the e-mail, or else the provider alias and the subject joined by an underscore.
  • The e-mail is marked confirmed only when the provider is trusted and stated the address was verified.

After the provider

Coming back from the provider is not the end of the sign-in. Authio treats it like any other first factor:

  • It counts as one factor, whatever the provider did, and is recorded as fed in amr; the provider’s alias goes in the idp claim. The client’s second-factor steps still apply: Google plus a push approval gives acr 2.
  • The same refusals as a password sign-in apply: suspended or inactive account, no access to the client, sign-in address not approved.
  • If the client offers passkeys and the account has none, the registration step is offered.
  • The provider’s own errors become a fixed message on the hosted login, in the client’s branding and language; a person who declines at the provider is treated as a choice, not a failure.

What your app asked for travels on to the provider as far as each one understands it:

ProviderReceives from the original request
OpenID Connect, Microsoft Entra IDprompt=login, prompt=select_account, max_age and login_hint
Googleprompt=select_account, max_age and login_hint; prompt=login is sent as max_age=0
GitHubprompt=select_account only
AppleNone of them

Roles from provider claims

A provider can grant roles. On the provider’s Access tab, add rules that turn a claim the provider sends — groups containing finance, a department, a tenant — into a role of the realm. The rules run on every federated sign-in.

Part of a ruleValues
ComparisonEquals (exact value), Contains (an item of a list), StartsWith (a prefix, for paths such as acme/engineering/backend) or Present (the claim exists). Comparisons are case-sensitive.
When the claim is missingWithdraw removes the role (the default), Keep leaves it, Refuse refuses the sign-in, for claims you cannot do without.

A claim that arrives and does not match always withdraws the role. Rules only touch roles granted by the same provider’s rules: roles given by hand or through a group are never removed. Before saving, the preview shows what a rule would grant or withdraw, replaying a person’s last real sign-in or claims you type in.

How the broker protects the sign-in

  • PKCE with S256 on every provider, confidential ones included, an opaque state used once and valid for 15 minutes, and a nonce checked in the ID token.
  • The provider’s ID token is validated in full: signature against the published keys, issuer, audience and lifetime.
  • Only providers offered on the client can be used from its sign-in, and only while active.
  • Calls to the provider, including its discovery document and keys, go only to public addresses and never follow redirects.
  • Your app never receives the provider’s tokens, only an ordinary Authio code.

Hiding and removing a provider

Hiding a provider from Identity Providers sets it inactive: its button disappears from every sign-in screen and the broker refuses sign-ins through it. Showing it again is immediate.

Removing a provider keeps the accounts that came through it, but they lose this way in. People without a password need another way to sign in, such as a password reset or a passkey.

Next steps