Skip to content
Add-OnZekt Gate

Consume Zekt with your own enterprise identity

Zekt Gate is the trusted identity boundary between your Microsoft Entra tenant and the Zekt orchestration platform. Your developers authenticate the way they already do — no GitHub identity required at the API edge.

is a premium add-on to . The core experience stays GitHub-native.

Entra to GitHub — the problem

An identity mismatch at the API edge

Zekt authorizes through GitHub. Enterprise developer portals authorize through the corporate directory. Something has to reconcile the two — without either side giving up its identity model.

Automation path

  1. Developer
  2. GitHub Actions
  3. zekt-action
  4. Zekt

Works today. GitHub identity establishes the caller context.

Enterprise path, unsolved

  1. Developer
  2. Backstage
  3. Entra ID
  4. ?
  5. Zekt

A vaguely associated personal GitHub identity is not an enterprise identity boundary.

Enterprise path, with Zekt Gate

  1. Developer
  2. Backstage
  3. Entra ID
  4. Zekt Gate
  5. Zekt

A validated, attributable request enters the same Zekt service model.

How it works — Entra to GitHub in four steps

What happens to a request

An enterprise application presents an Entra access token. Zekt Gate establishes that the token can be trusted, resolves which Zekt customer it belongs to, and forwards a contextualized request to the existing Zekt APIs.

Establish that the presented identity can be trusted.

  • Verify the token signature against the issuing tenant
  • Validate the issuer is the expected Entra issuer
  • Validate the audience matches the Zekt Gate API
  • Validate the token is within its lifetime
Boundaries

Deliberately thin

Zekt Gate is an ingress and trust layer. Zekt remains the source of truth for every domain behaviour behind it.

Zekt Gate is responsible for

  • Enterprise ingress
  • Token validation and identity translation
  • Authorization at the enterprise API boundary
  • API-level metering
  • Preserving provenance and correlation context

Zekt remains responsible for

  • Directory and Registry
  • Service contracts and version semantics
  • Orchestration and workflow execution
  • Run correlation
  • Billing and domain logic
Packaging

A separate product, by design

Zekt Gate is a premium add-on to Zekt. It is not the kind you switch on from inside it.

Every other Zekt add-on

  • Ships inside Zekt Core
  • Enabled from within Zekt
  • Runs in Zekt Core's own trust context

Zekt Gate

  • A separate product, deployed apart from Zekt Core
  • Licensed and enrolled on its own
  • Depends on Zekt Core — never merges into it

Why the separation is the point

A boundary cannot live inside what it protects

Zekt Gate stands between a customer's identity provider and Zekt. Sharing Zekt Core's runtime would put the check and the thing being checked on the same side of the line.

Compromise stops at the edge

Enterprise ingress is the exposed surface. Keeping it decoupled means a failure there stays there, rather than widening into orchestration or provider workflows.

One job, narrowly scoped

Gate validates an Entra identity and translates it into a Zekt request context — for Zekt requests and nothing else. It issues no identity of its own and holds no domain logic.

Capabilities — enterprise API ingress

Built for enterprise ingress

The questions a security reviewer asks before a developer portal is allowed to reach GitHub workflow orchestration with corporate identity.

Tenant isolation

Customer context is derived from the validated token. A token from one tenant cannot reach another customer by changing a URL segment or a body field.

Key rotation tolerance

Signing key rotation in your directory is normal identity-provider behaviour. It requires no action from you and causes no outage here.

Minimal permissions

Enrollment validates tokens rather than requesting broad directory access. Zekt Gate does not ask to manage your Entra environment.

User and application flows

Delegated user access and service-principal access are distinguished explicitly, and carry different permission models.

Attributable audit trail

The audit record names the enterprise, the tenant, the user, the client application and the orchestration — not merely that a gateway called Zekt.

Usage attribution

Every call carries the identity dimensions Zekt bills and audits against, so consumption is attributable to a customer at the point it happens. There is no second billing system to reconcile.

Enrollment

Three doors, three people

Enrollment establishes which Entra tenant is trusted for which Zekt customer. Each door is held by a different person, so you only need to recognise your own.

PreviewInterface preview with placeholder data. No account, token or directory is connected.

Waiting on your identity administratorYour request is with the person who can approve Zekt Gate in your Entra tenant. Anyone who administers this Zekt customer can pick it up — and the request does have a deadline, so it is worth chasing.

  1. Door 1

    Your Zekt account

    Whoever owns the Zekt relationship

    GitHub, via Zekt Core

    1. Sign in through Zekt CoreZekt Gate has no login of its own. Core authenticates you and tells Gate the answer.
      Why this step, and what you need: Sign in through Zekt Core

      What this establishesEstablish who you are without Zekt Gate ever handling one of your credentials.

      Why Zekt Gate needs itGate delegates and never forwards. It has no password store and no sign-in of its own, so there is exactly one place a Zekt identity can be established — and one place it can be revoked. What comes back to Gate is an assertion of who you are and which Zekt customers you may administer, never a credential.

      What you provide
      • The GitHub account your Zekt account signs in withWhere to get itYou already have it if you use Zekt. If you do not, you are handed to Zekt’s own signup and returned here afterwards — Gate does not create Zekt accounts, because a second place a customer can be born is a second place billing can start.What it commits you toThis identity is recorded as the person who enrolled, and it is the identity Zekt is re-asked about before anything is bound. Signing in with a different GitHub account means a different person, even at the same company.
    2. Choose the Zekt customerCore confirms you may administer it. Membership alone is not authority.
      Why this step, and what you need: Choose the Zekt customer

      What this establishesFix which organisation this enrollment belongs to, and confirm you may act for it.

      Why Zekt Gate needs itA GitHub login identifies a person; a Zekt customer is an organisation, and one person may administer several. Selecting is not enough — Zekt must assert the authority, because a read-only member must not be able to bind their employer’s directory to a billing relationship. Gate re-checks that authority immediately before it acts, rather than trusting what was true at sign-in.

      What you provide
      • Which Zekt customer you are enrollingWhere to get itZekt offers the list you may administer. If the organisation you expect is not on it, an existing owner of that customer has to give you owner rights at Zekt first — Gate cannot grant them, and cannot see why they are missing.What it commits you toThis choice decides which account carries the charge and which Zekt organisations your directory’s tokens will be able to reach. It is not editable afterwards: moving an enrollment to a different customer means enrolling again.
    3. Accept the commercial termsCore enables Gate as an add-on and remains the source of truth for billing.
      Why this step, and what you need: Accept the commercial terms

      What this establishesHave the organisation commit before anyone spends their identity administrator’s goodwill.

      Why Zekt Gate needs itThe order is deliberate. Connecting a directory carries a recurring charge, and the person who approves it is usually in another team — so the commitment is made by the person who can make it, before a colleague is asked for a favour. Zekt owns the terms and the billing; Gate renders what Zekt sends and holds no price of its own.

      What you provide
      • Your acceptance of the terms Zekt presentsWhere to get itShown to you by Zekt at sign-in, and repeated in Zekt Gate on the enrollment panel — the amount, the period it covers, and any free period that applies.What it commits you toCharging starts when your administrator’s approval completes the connection in Door 2 — not when you accept here, and not at your first call. The charge is per connected directory, so a second directory is a second charge. Any free period is stated with the terms.
  2. Door 2

    Your Entra tenant

    Your Entra Global Administrator

    Microsoft Entra ID

    1. Nominate the tenantA claim, not yet trusted. Typing a tenant id proves nothing on its own.
      Why this step, and what you need: Nominate the tenant

      What this establishesRecord which directory you are claiming, so Gate can prepare the exact request your administrator approves.

      Why Zekt Gate needs itA tenant identifier typed into a form proves nothing — anyone can type anyone’s. Naming one is a claim: it reserves nothing, grants nothing, and stays inert until an administrator of that directory proves it. That is also what stops a claim being used to block somebody else’s directory.

      What you provide
      • Your Microsoft Entra directory (tenant) ID00000000-0000-0000-0000-000000000000Where to get itIn the Microsoft Entra admin centre it is shown as Tenant ID on the directory’s overview page. A domain name such as contoso.com is not the same thing. Your identity administrator can read it in seconds if you do not have access yourself.What it commits you toThis is the directory whose sign-ins Zekt will trust for this account, and a directory serves at most one Zekt customer. If you name a different one later, the approval link you already sent stops working and your administrator has to be sent the new one.
    2. Grant admin consent onceOn Microsoft’s own screen. Only a tenant administrator can do this — which is what makes it proof.Waiting
      Why this step, and what you need: Grant admin consent once

      What this establishesTurn the claim into proof, by the one act that only an administrator of that directory can perform.

      Why Zekt Gate needs itThere is no DNS record to publish, no directory query to run and no support ticket to raise: the consent is the proof. Direction is what makes it safe — your directory gains permission to issue tokens naming Zekt Gate, and Gate gains no standing inside your directory. The screen lists two permissions: connecting the directory to Zekt Gate, and “Sign in and read user profile”, which Microsoft requires for any sign-in and which covers the person signing in and nobody else. No reading other users, no groups, no application permissions.

      What you provide
      • A Global Administrator of that directory, and about two minutes of their timeWhere to get itGate writes the request for you once the directory is named — what is being asked, what is explicitly not being asked, and the link. It is written to be forwarded, and the administrator needs no Zekt account and will not be asked to create one.What it commits you toThe request has a deadline set by Zekt; if it passes, the enrollment has to be started again from Door 1, so it is worth chasing. Approval creates a local record of Zekt Gate inside your directory which you own, can see, and can revoke at any time — revoking it stops Gate working immediately.
    3. Gate verifies the tenantA Microsoft-signed token carrying the tenant id turns the claim into a fact.
      Why this step, and what you need: Gate verifies the tenant

      What this establishesConvert the approval into something Gate can check cryptographically rather than take on trust.

      Why Zekt Gate needs itYour administrator returns to Gate and signs in with their own directory account. The tenant identifier inside that Microsoft-signed token is the fact the claim was waiting for — it requires no permission of any kind, and it is the moment the mapping stops being inert.

      What you provide
      • Nothing further from youWhere to get itYour administrator is returned here automatically after approving. Closing the tab at that point is common and costs nothing — the enrollment is resumable and the same link still works.What it commits you toThis is the moment the connection exists, and the moment the recurring charge for this directory starts. Everything before it can be abandoned at no cost.
  3. Door 3

    Your applications

    Your developer-portal team

    Gate portal, under customer authority

    1. Register the calling applicationsAn unlisted application is refused even with an otherwise valid token.
      Why this step, and what you need: Register the calling applications

      What this establishesName which of your applications may present a token to Zekt.

      Why Zekt Gate needs itA trusted directory is not an authorised one. Without this list, anyone at your company who can obtain a token for Zekt Gate can call Zekt — which is most of your company. Gate checks the calling application on every request and refuses one that is not listed, whatever else the token proves.

      What you provide
      • The application (client) ID of each application that will call00000000-0000-0000-0000-000000000000Where to get itIn the Microsoft Entra admin centre under App registrations, on your own application’s overview page. For most customers the first one is their developer portal.What it commits you toThis is the ID of your application — the one that asks. It is not the record of Zekt Gate that consent created in your directory; those are two different objects and they are confused constantly. Until at least one application is registered, every call is refused.
    2. Map Entra roles to Zekt permissionsStart from a preset — Reader, Requestor, Administrator — and refine if needed.
      Why this step, and what you need: Map Entra roles to Zekt permissions

      What this establishesDecide what each caller may do in Zekt terms, from what your directory says about them.

      Why Zekt Gate needs itEntra hands over roles and scopes in your vocabulary; Zekt permissions are Zekt’s. Gate maps one to the other so you do not have to design a permission model — and Gate’s answer and Zekt’s must both be yes. Where either is unsure, the request is denied.

      What you provide
      • Who you assign to Zekt Gate’s roles, and which Zekt permissions each role carriesWhere to get itStart from a preset — Reader, Requestor or Administrator — and refine only if you need to. You assign people and applications to Zekt Gate’s roles on Zekt Gate’s record in your Microsoft Entra admin centre. Zekt Gate does not read your directory roles or groups.What it commits you toAccess is still granted and removed in your own directory: Zekt Gate refuses anyone your administrator has not assigned to its role. Leave Microsoft’s “Assignment required” setting off on Zekt Gate’s record, because your administrators sign in to that same record to approve it and to prove control, and requiring assignment could lock them out.
      • For each application: acting as a person, or acting as itselfWhere to get itDecide it per application rather than once for all of them. An interactive tool such as a developer portal should act on behalf of the signed-in user; a background job has no user to act for and should act as itself.What it commits you toThis is the difference between an audit record naming a person and one naming a system. Choosing "as itself" for an interactive tool is not insecure, but it permanently costs you the ability to say who asked.
    3. Constrain scope where requiredLimit which organisations a tenant or application may target. Narrowest wins.
      Why this step, and what you need: Constrain scope where required

      What this establishesLimit which of your Zekt organisations a directory or an application is allowed to act on.

      Why Zekt Gate needs itWho is calling and what they are acting on are different questions, and collapsing them is how one division provisions into another division’s estate. A retail developer portal with a valid token and a legitimate Zekt customer still should not be able to target the platform organisation. Every layer can only subtract: where a directory limit and an application limit both apply, a request must satisfy both, and Zekt’s own answer applies on top of that.

      What you provide
      • Which Zekt organisations each directory and application may targetWhere to get itThey are the organisations your Zekt customer already controls — the same ones you see at Zekt. Gate does not invent or discover them.What it commits you toThe first directory you enrol may target everything the customer controls; every directory after it requires this decision before it works at all, because a second directory usually means an acquisition or a separate division, and silently inheriting the first one’s reach is the wrong default. Removing a limit later is a grant rather than a tidy-up — it returns that directory to inactive, pending a fresh decision. Changes apply from the next request.
    4. Make a test callGate shows exactly what it saw and what it decided. Enrollment completes here.
      Why this step, and what you need: Make a test call

      What this establishesFinish on evidence rather than on configuration having been saved.

      Why Zekt Gate needs itOnboarding is not complete when settings are stored — it is complete when a real token from your directory has produced a real Zekt result. When it does not, Gate shows the chain it checked and where it broke, rather than an unexplained 401. Nearly every enterprise integration failure of this kind is an audience, a scope or a consent mistake, and from the outside all three look identical.

      What you provide
      • A token from your own directory, obtained by one of the applications you registeredWhere to get itYour application acquires it the way it normally acquires tokens, naming Zekt Gate as what the token is for. Gate’s test is a harmless read, so running it creates nothing and is not itself charged.What it commits you toThe account of what Gate saw is available only to a signed-in portal administrator, only for their own customer, and it never echoes the token itself. It shows the decision, not the credential.

What approving Zekt Gate does, and does not, grant

Consent lets your directory issue tokens for Zekt Gate. It gives Zekt Gate no standing inside your directory.

You grant

  • “Connect this directory to Zekt Gate”Gate’s own permission, and the one that does the work. Microsoft creates a local record of Gate in your directory, which you control, so your applications may request a token naming Zekt Gate.
  • “Sign in and read user profile”Microsoft Graph User.Read. Microsoft requires it for any sign-in and puts it on every consent screen. It covers the profile of the person signing in, and basic company information — never another user. Zekt Gate is granted it because the sign-in cannot complete otherwise, and never calls Microsoft Graph at all.
  • Those two, and nothing elseIf Microsoft’s screen shows you a third line, stop and tell us. This page is meant to match it exactly.
  • You choose who is assignedOnly people your administrator assigns to Zekt Gate’s role, in your own directory, get through. Zekt Gate refuses everyone else.
  • You can revoke it at any timeRemoving the consent in your tenant stops Gate from being usable immediately.

You do not grant

  • No access to anyone but the person signing inGate cannot read your other users, your groups or your organisational structure. The profile permission above reaches the signed-in administrator and stops there.
  • No application permissionsEverything granted is delegated — it can only ever act for a person who is signed in. Gate holds nothing it could use on its own, at enrollment or afterwards.
  • No Microsoft Graph callsGate makes no request to Microsoft Graph. The permission above is a prerequisite Microsoft imposes on the sign-in, not something Gate uses.
  • No control of your Entra environmentGate validates tokens you issue. It never manages anything on your side.

The step-by-step setup guide shows each screen your administrator will see, and how to find or remove Zekt Gate afterwards.

What Zekt Gate saw

The Door 3 test call renders exactly this — established from the validated token, never from the request body or URL.

Enterprise
Contosoenrollment
Entra tenant
aaaaaaaa-1111-2222-3333-bbbbbbbbbbbbtid claim
Zekt customer
cust-000123tenant mapping
Caller
cccccccc-4444-5555-6666-ddddddddddddoid claim
Client application
Backstageappid claim
Permissions
zekt.orchestrations.createscp / roles claims
Correlation
orc_7f3a9c21Zekt orchestration

Calling the API

The API is shaped around Zekt domain concepts, not around Gate's internals.

POST /v1/orchestrations
Authorization: Bearer <entra-access-token>
Content-Type: application/json

{
  "services": [
    {
      "name": "vm.provision",
      "version": "3",
      "parameters": {
        "environment": "production",
        "size": "large"
      }
    }
  ]
}