Skyline-ATS · For the customer's IT team
Everything needed to connect one Entra tenant to a Skyline-hosted training portal. Work through it once and it is done — the checks at the end exist because each one has previously cost a round trip on a comparable setup.
Learners open a training address, sign in with the Microsoft account they already use, and go straight into their course. We never see or store a password, and we hold no client secret — the connection is a public OpenID Connect client using PKCE.
Entra admin centre → Applications → App registrations → New registration
The app → Authentication → Add a platform
Choose Single-page application. This is the setting that most often goes wrong, and it fails late — after the person has already typed their password.
https://<training-address>/auth/callbackThe app → Token configuration → Add optional claim
This is the step that has no equivalent elsewhere, and skipping it produces a learner list
with neither names nor email addresses. Entra does not include an
email claim by default. It appears only where the directory holds a mail
attribute, or where you add it here as an optional claim.
The app → API permissions
We request openid, email and profile. These are
delegated Microsoft Graph permissions and are usually present on a new registration.
The app → Authentication → Front-channel logout URL
Signing out of training clears the training session only and leaves the Microsoft session alone, so nothing is required here. Tell us if you would rather signing out of training also signed them out of Microsoft — be aware that affects every other Microsoft application they have open — and we will send an exact value.
Your DNS provider · one CNAME per training address
Only needed if the training runs on your own domain. If we have given you an
address ending in .learn.skyline-ats.dev, that is already live — skip this step.
academy.example.com CNAME connect.skyline-ats.devThat is everything we need. Neither is a secret.
| Value | Where to find it | Example |
|---|---|---|
| Directory (tenant) ID | The app → Overview | 72f988bf-86f1-41af-91ab-2d7cd011db47 |
| Application (client) ID | The app → Overview | 4a1b2c3d-5e6f-7890-abcd-ef1234567890 |
We build the issuer from your tenant ID as https://login.microsoftonline.com/<tenant-id>/v2.0 — there is nothing further for you to look up.
These share a shape: the configuration looks complete, every obvious check passes, and something still fails when a real person tries to sign in.
Entra omits email unless the directory holds a mail attribute or it is added
as an optional claim. Sign-in succeeds and the person appears in reports as nobody —
no name, no address, nothing to match them to.
Step 3 is the fix, and it is the one step people skip because nothing warns them.
Both platforms accept the same URL and the console shows no complaint. A Web platform expects a client secret, so the failure arrives at the token exchange — after the person has typed their password — and reads as a fault at our end.
Where a tenant blocks user consent, every learner reaches a consent screen they cannot approve. It looks like an access problem with the training rather than a one-time approval nobody has given.
login.microsoftonline.com/<tenant> and the same address with
/v2.0 are different issuers producing differently shaped tokens. Send us the
tenant ID and we will build the right one — this only goes wrong when someone sends a
hand-assembled issuer instead.