yeke.io · docs · enterprise

Entra ID SSO Setup

The steps for registering the application in Entra ID and connecting it to YEKE, in order. At the end, users sign in with their Microsoft account, and members of the admin group become admins in YEKE.

Before you start

A few things need to be ready on both sides.

  • YEKE side. The Enterprise license's sso item must be enabled. YEKE_PUBLIC_URL must be set — the redirect URI is derived from it.
  • Entra roles. At least Application Developer to register the app. Groups Administrator or User Administrator to create the group. Cloud Application Administrator as well, if you will require assignment.
Where in EntraWhich YEKE field
App registration → OverviewDirectory (tenant) ID Inside the issuer URL as <tenant-id>
App registration → OverviewApplication (client) ID Client ID
App registration → Certificates & secretsValue Client secret
Group → OverviewObject ID Administrator group

1. Register the application

If you have more than one tenant, pick the right one first.

  1. Go to entra.microsoft.com. If you have more than one tenant, switch with the Settings icon in the top menu.
  2. Entra ID → App registrations → New registration.
  3. Enter a Name, and for Supported account types choose Single tenant only.
  4. For Redirect URI, pick Web from the platform selector and enter https://<yeke-address>/api/auth/oidc/callback. <yeke-address> is the core's YEKE_PUBLIC_URL value; if you open YEKE at a different address in the browser, YEKE_PUBLIC_URL is the one that counts.
  5. Click Register. On the Overview page that opens, note down the Application (client) ID and Directory (tenant) ID.

Don't also open an Enterprise app

Registering the application automatically creates a matching entry under Enterprise apps. Don't create a second one with Enterprise apps → New application — that would be a separate application, and signing in with an ID from one and a secret from the other stops with IDP_CLIENT_REJECTED.

The address must sit under the Web platform

The redirect URI has to be registered under the Web platform; adding it under Single-page application or Mobile and desktop applications will not work.

2. Create a client secret

The secret is only ever shown once.

  1. In the application, go to Certificates & secrets → Client secrets → New client secret.
  2. Enter a description, set Expires to at most 24 months, click Add.
  3. Copy the Value column from the row that appears — it is never shown again once you leave the page.

Value, not Secret ID

Copy the Value column, not Secret ID; mixing them up stops sign-in with IDP_CLIENT_REJECTED (Entra's own code in the core's log is AADSTS7000215).

When the secret expires, sign-in stops with the same error (AADSTS7000222 on Entra's side); local accounts are unaffected. Put the expiry date on a calendar — renewal steps are at the end of this page.

3. Create the admin group

A group's type cannot be changed later.

  1. Entra ID → Groups → All groups → New group.
  2. For Group type choose Security, and give it a Group name such as YEKE Admins.
  3. For Membership type choose Assigned, add people with Members, then click Create.
  4. Note the group's Object ID on its Overview page.

Microsoft 365 and Distribution groups don't work

With the Security groups setting from step 4, only Security groups land in the token; Microsoft 365 and Distribution groups don't — the person can sign in, but their role stays member. A group's type can't be changed afterward, so a wrong-type group means creating a new Security group. Microsoft 365 groups are also often public, open for anyone in the tenant to join — a group like that should not carry admin rights.

The same rule applies to the Kubernetes group mapping — that also takes a Security group's Object ID.

4. Add groups to the token

Entra does not put groups in the token by default.

  1. In the application, go to Token configuration → Add groups claim.
  2. Check Security groups.
  3. Under Customize token properties by type, select Group ID for ID.
  4. Emit groups as role claims should not be checked; save.

Check

Open the application's Manifest page and look for these two values.

"groupMembershipClaims": "SecurityGroup"

"optionalClaims": {
  "idToken": [
    { "name": "groups", "source": null, "essential": false, "additionalProperties": [] }
  ]
}

additionalProperties has to stay empty. If emit_as_roles is present, groups go into the roles claim instead and YEKE never sees them; if sam_account_name or cloud_displayname is present, a name arrives instead of the GUID and the Object ID stops matching.

Groups assigned to the application is only needed for a user in more than 200 groups (requires Entra ID P1/P2, and does not flatten nested groups) — most setups can skip it.

5. Restrict sign-in (optional)

Skip this and anyone in the tenant can sign in as a member, and each first sign-in consumes a license seat.

  1. Open the application from Entra ID → Enterprise apps → All applications.
  2. Under Properties, set Assignment required? to Yes, and save.
  3. Under Users and groups → Add user/group, pick people and click Assign.
  4. When assignment is required, the permissions also need admin approval: in the app registration, API permissions → Grant admin consent.

Assigning a group requires Entra ID P1/P2; on the free tier you assign people one at a time. An unassigned person stops on Microsoft's sign-in page with AADSTS50105.

6. Define the provider in YEKE

Sign in to YEKE with an admin account: Menu → Administration → OIDC single sign-on.

FieldValue
Button labele.g. Microsoft — the sign-in button reads "Sign in with Microsoft"
Issuer URLhttps://login.microsoftonline.com/<tenant-id>/v2.0 (no trailing slash)
Client IDThe Application (client) ID from step 1
Client secretThe Value you copied in step 2
CA certificate (PEM)empty
Username claimpreferred_username — the username arrives as [email protected]
Groups claimgroups
Administrator groupThe group's Object ID from step 3
Extra scopesempty

Click Add a provider, run Test discovery on the card, and once it succeeds click Enable.

The test does not try the client secret

The discovery test only reads the discovery document and the signing keys; the client secret and the groups claim are only seen at the first real sign-in. An issuer mismatch fails at test time.

With an admin group set, the role is derived from the group on every sign-in; it cannot be changed from the Users screen. To make someone admin or remove admin, add them to or remove them from the group in Entra.

Kubernetes groups (optional)

On the cluster's identity screen, in the Directory group mapping section, put the group's Object ID on the left and the group's name in Readable name (optional); details on the Permissions and RBAC page. Security groups are used there too.

7. Try it

  1. Sign out, then click the SSO button on the sign-in screen (e.g. Sign in with Microsoft).
  2. Go through Microsoft's own sign-in.
  3. Back in YEKE, check that your account's Role column reads admin on the Menu → Administration → Users screen.

The role is only computed at sign-in — after adding someone to the group, they need to sign out and back in. Keep the local admin account around; it is the emergency access path.

Troubleshooting

SymptomCauseFix
Sign-in works but the person isn't admin The group isn't a Security group, step 4 wasn't done, the Administrator group field has a different Object ID, or the person hasn't signed in again since the change Check steps 3 and 4; have the person sign out of YEKE and back in
"The identity provider rejected YEKE's client credentials" (IDP_CLIENT_REJECTED) Secret ID was copied instead of Value, the secret expired, or the ID and secret come from different applications Create a new secret and enter the Value; check that the client ID and secret come from the same application registration. In the core's log, AADSTS7000215 means an invalid secret, AADSTS7000222 means an expired one.
"This account is in too many groups for the provider to list them" (OIDC_GROUPS_OVERAGE) The user is in more than 200 groups Use Groups assigned to the application and assign the group to the app (requires Entra ID P1/P2)
"This username is already taken by another account" (USERNAME_CONFLICT) A local or LDAP account already has the same name Rename or disable the conflicting account
AADSTS50011 on Microsoft's page The redirect URI does not match, or is not under the Web platform Check the registered address and platform
AADSTS700016 on Microsoft's page The client ID is wrong, or the app is not in the issuer's tenant Compare the client ID and the tenant-id in the issuer URL
AADSTS50105 on Microsoft's page Assignment is required and the person isn't assigned Assign them under Users and groups
Microsoft shows a screen asking for admin approval The tenant does not let users consent to applications themselves In the app registration, API permissions → Grant admin consent
"Discovery test failed" with an issuer mismatch The issuer URL is malformed Fix it to https://login.microsoftonline.com/<tenant-id>/v2.0
Saving the provider: "The core has no configured public address" YEKE_PUBLIC_URL is not set Set it and restart the core. Installation settings →

You'll find Entra's own error code in the core's log:

docker compose logs core 2>&1 | grep "rejected the client authentication"

Renewing the client secret

Two secrets can be valid at the same time, so there is no outage.

  1. In Entra, create a new secret under Certificates & secrets → Client secrets → New client secret and copy the Value.
  2. In YEKE, open the provider card's Edit → New client secret (optional) field, paste it, and click Save changes.
  3. Sign in once via SSO to confirm the new secret works.
  4. Delete the old secret in Entra.

The full OIDC settings

Field details, the Keycloak setup and the limits live on the general OIDC page.