Skip to main content

Federated domains and domain verification

Routing an email domain to your identity provider, the DNS record that proves you own it, the seven-day grace period, and what happens when the record disappears.

Written for whoever runs IT11 min readUpdated

Registering an identity provider tells Qorionix that a provider exists. It does not tell Qorionix who should be sent to it. That is what a federated domain does: it says that anybody typing an address in yourfirm.com at the sign-in prompt should be handed to your identity provider rather than asked for a Qorionix password.

Because that is a statement about who controls a namespace, it has to be proved rather than asserted. A tenant that could route any domain it named could route yours.

Where it lives

Identity → Domain routing. The page itself is headed Email domain routing — the two names differ, so search for either. Its description is the whole feature in one line: Home-realm discovery: which email domain sends a person to which identity provider instead of asking for a password.

Reading the list needs iam:federation.read; claiming, verifying and reissuing need iam:federation.write; removing a domain needs iam:federation.delete. A role named delegated_admin receives read and write but deliberately not delete, on the reasoning that a registered provider is an outside authority whose assertions become logins here — see Delegated administration.

The table columns are Domain, Routes to, Ownership, Added, Routes logins and Last checked. The two to read together are Ownership and Routes logins: the first is a verification state, the second is a plain Yes or No answering the only question that matters operationally.

Claiming a domain

  1. Press Add domain

    The wizard is headed Route an email domain and explains itself: Someone typing an address in this domain at the sign-in prompt is sent to the provider you choose, without being asked for a Qorionix password.

  2. Enter the bare domain

    The field is Email domain, and its help is precise about scope: The part after the @, for example contoso.com. Subdomains are not included — add mail.contoso.com separately if your people use it. A value with an @, a scheme or a path is refused with Enter a bare domain such as contoso.com — no @, no https://, no path.

  3. Choose the provider

    Send these people to, with the help Only providers configured in this organization can be chosen. If the list is empty you have no federated provider yet, and the wizard says so: A domain has to route to something, and this organization has no federated providers yet. Add a provider first.

  4. Read the toast, because it tells you the state you are now in

    {domain} claimed. It routes no logins until you publish the TXT record and it is verified. A claim on its own does nothing.

The DNS record

Press DNS record on the domain's row. The panel is headed DNS record for {domain} and gives you three values, each with its own Copy control.

The record to publish
Record type:  TXT
Record name:  _qorionix-challenge.yourfirm.com
Record value: qorionix-domain-verification=zq1-<43 random characters>

The panel explains why the record sits where it does, and the reason is worth understanding before somebody on your team tidies it away:

The record goes on the _qorionix-challenge subdomain, not on the domain itself. That keeps it away from your SPF and DMARC records, which live at the top of the zone and which other systems depend on.
Identity → Domain routing, DNS record panel

The proof is simply that only somebody who controls the zone can create that record. There is no cleverness in it and none is needed.

Publish it, then press Check ownership. The panel warns that DNS changes can take up to an hour to propagate, which in practice means: if the first check says the record is absent, wait rather than assuming you made a mistake.

The states, and what each one means

The Ownership column, what it means, and whether the domain is routing sign-ins in that state.
Shown asMeaningRoutes logins?
Not checked yetThe claim exists and nothing has looked for the record.No
Waiting for DNS recordWe looked and the record was not there. Usually propagation; sometimes the record is on the domain itself rather than on the challenge subdomain.No
Wrong record publishedA record exists at that name and its value is not the token we issued. A truncated paste, or a token from a challenge that has since been reissued.No
Ownership verifiedThe record was found with the right value.Yes
Verification lostIt was verified, the record then stopped being found for long enough, and the claim was demoted.No

There is a sixth thing you may see, and it is not a state: Could not check. That means the DNS lookup itself did not complete — a resolver problem, a timeout, a zone that failed to answer. It is reported separately from the record was absent on purpose, because the two mean opposite things and treating an outage as an absence is how a working federation gets switched off during somebody else's incident.

Could not check — the DNS lookup did not complete. Nothing about the claim has changed.
the result of a check that could not resolve

Rechecking, and the seven-day grace period

Verification is not a one-off. A background job rechecks domains on a cadence that depends on their state, so a record deleted a year after setup is noticed rather than trusted forever.

How often each state is rechecked.
StateRechecked
VerifiedEvery 24 hours
Pending — waiting for the recordEvery hour
Verified but the record has gone missingEvery 6 hours, during the grace period
DemotedEvery 6 hours
After a lookup that could not completeRetried in 15 minutes

The practical consequence: put the challenge record in whatever documentation your DNS zone has, next to the SPF and DMARC entries. It looks like debris to anybody who does not know what it is, and the person tidying the zone is rarely the person who set up federation.

Two organisations claiming the same domain

Claims are not exclusive until one is proven. Several organisations can hold an unverified claim on the same domain — that is the state a shared contractor's domain, or a typo, naturally produces — and none of them routes anything.

When one of them verifies, it wins and the others are released. The console reports it plainly:

Ownership of {domain} is verified. {count} unproven claim(s) on this domain by other organizations were released.

That is the right resolution: proof beats assertion, and an unproven claim by somebody else should not be able to block you. If you are on the receiving end of a release, you claimed a domain you cannot prove you control, and the fix is to prove it or to remove the claim.

Reissuing a challenge

Issue a new challenge mints a fresh token. It is the right action if the old value leaked, or if you have lost track of which record is current. It is not a repair for a failed check, and it makes things worse if you use it as one, because the confirmation says exactly what it costs:

Issue a new challenge token for {domain}? The current token stops working immediately, the domain is no longer verified, and it routes no logins until the new record is published and checked.

So reissuing demotes a verified domain immediately, with no grace period. If federation is working, do not press it to see what happens.

Removing a domain

Deleting the routing rule sends those people back to a password prompt, and the confirmation says so: Stop routing {domain} to {provider}? People with an address in this domain will be asked for a Qorionix password again instead of being sent to the provider.

That is worth thinking about for a moment before you confirm it. If your people were provisioned through federation and never set a Qorionix password, sending them back to a password prompt is not a fallback — it is a lockout. Check that they have another way in before removing the last domain that routes to a provider.

Checking it worked

  1. Confirm the record from outside our infrastructure: dig TXT _qorionix-challenge.yourfirm.com +short should return the value the panel shows, quoted. If it returns nothing, the record has not propagated or is on the wrong name.
  2. Press Check ownership and read the result rather than the row. Every outcome returns success at the HTTP level and carries its own reason, so a client that only looks at the status code will think every check passed.
  3. Confirm the Routes logins column reads Yes.
  4. Test the actual journey with a real address in that domain. The identifier-first sign-in flow explains what should happen and which endpoint answers.

If the domain verifies and sign-in still asks for a password, the problem is not here — it is either the provider itself or which discovery endpoint your sign-in page is calling, and the identifier-first article covers both.

Was this article wrong?

If a procedure here does not match what you see, or a limit we described has changed, tell us and we will fix the page. Email us about this article, or see how to get help if you need an answer rather than a correction.

Everything in identity and access