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
ssoitem must be enabled.YEKE_PUBLIC_URLmust 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 Entra | Which YEKE field |
|---|---|
| App registration → Overview → Directory (tenant) ID | Inside the issuer URL as <tenant-id> |
| App registration → Overview → Application (client) ID | Client ID |
| App registration → Certificates & secrets → Value | Client secret |
| Group → Overview → Object ID | Administrator group |
1. Register the application
If you have more than one tenant, pick the right one first.
- Go to entra.microsoft.com. If you have more than one tenant, switch with the Settings icon in the top menu.
- Entra ID → App registrations → New registration.
- Enter a Name, and for Supported account types choose Single tenant only.
- For Redirect URI, pick Web from the platform selector and enter
https://<yeke-address>/api/auth/oidc/callback.<yeke-address>is the core'sYEKE_PUBLIC_URLvalue; if you open YEKE at a different address in the browser,YEKE_PUBLIC_URLis the one that counts. - 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.
- In the application, go to Certificates & secrets → Client secrets → New client secret.
- Enter a description, set Expires to at most 24 months, click Add.
- 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.
- Entra ID → Groups → All groups → New group.
- For Group type choose Security, and give it a Group name such as
YEKE Admins. - For Membership type choose Assigned, add people with Members, then click Create.
- 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.
- In the application, go to Token configuration → Add groups claim.
- Check Security groups.
- Under Customize token properties by type, select Group ID for ID.
- 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.
- Open the application from Entra ID → Enterprise apps → All applications.
- Under Properties, set Assignment required? to Yes, and save.
- Under Users and groups → Add user/group, pick people and click Assign.
- 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.
| Field | Value |
|---|---|
| Button label | e.g. Microsoft — the sign-in button
reads "Sign in with Microsoft" |
| Issuer URL | https://login.microsoftonline.com/<tenant-id>/v2.0
(no trailing slash) |
| Client ID | The Application (client) ID from step 1 |
| Client secret | The Value you copied in step 2 |
| CA certificate (PEM) | empty |
| Username claim | preferred_username — the username
arrives as [email protected] |
| Groups claim | groups |
| Administrator group | The group's Object ID from step 3 |
| Extra scopes | empty |
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
- Sign out, then click the SSO button on the sign-in screen (e.g. Sign in with Microsoft).
- Go through Microsoft's own sign-in.
- Back in YEKE, check that your account's Role column reads
adminon 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
| Symptom | Cause | Fix |
|---|---|---|
| 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.
- In Entra, create a new secret under Certificates & secrets → Client secrets → New client secret and copy the Value.
- In YEKE, open the provider card's Edit → New client secret (optional) field, paste it, and click Save changes.
- Sign in once via SSO to confirm the new secret works.
- Delete the old secret in Entra.
The full OIDC settings
Field details, the Keycloak setup and the limits live on the general OIDC page.