What Is SAML (Basic) in Okta?
A plain-English guide to how Okta uses SAML 2.0 to sign people into apps with one login: the pieces, the flow, the setup, the security rules, and the mistakes that trip up beginners.
Every morning, millions of people open a laptop, click a tile named Salesforce, Slack, Zoom or Workday, and land inside the app without typing a single password. It feels like magic. It is really a carefully planned conversation between two computer systems, and one of the most common languages for that conversation is called SAML.
Okta is a company that sells an identity service. Its job is to know who people are and to vouch for them to other apps. When Okta vouches for a person using SAML, the setup inside Okta is called a SAML 2.0 app integration. The simple, everyday version of that setup is what people usually mean by “SAML (Basic)” in Okta. This guide starts from zero, explains every new word the first time it appears, and walks through the whole picture: what it is, why it exists, how a login actually travels across the internet, how to set it up, how to keep it safe, and how to fix it when it breaks.
1What Is SAML and Why Does It Exist?
Before we talk about Okta, we need the core idea: one trusted place proves who you are, and many apps believe it.
The problem SAML solves
Imagine a company with 60 different work apps. Without any shared login system, every app keeps its own list of usernames and passwords. Each employee must remember 60 passwords, or reuse the same one everywhere, which is dangerous. When someone forgets a password, the help desk gets a ticket. When someone leaves the company, an administrator must remember to remove that person from all 60 apps, one by one. If even one app is forgotten, a former employee may still be able to log in.
This pain has a name: password fatigue. It costs time, creates security holes, and makes onboarding and offboarding slow. The cure is single sign-on, usually shortened to SSO. With SSO, a person proves who they are once to one trusted system, and every connected app accepts that proof.
What SAML is
SAML stands for Security Assertion Markup Language. It is an open standard, which means it is a published set of rules that any company can follow so that different products can work together. SAML defines how one system can send a signed message to another system saying, “This person has been checked, and here is who they are.”
The word “markup language” means the message is written in XML, a text format that uses tags, similar to the way a web page uses HTML tags. People rarely read these messages by hand, but knowing they are structured text helps later when we talk about signatures and debugging.
Think of an international airport. You do not prove your identity to the airline, the shop, and the lounge separately. A government issues you a passport once. Every desk in the airport trusts the passport because it carries an official stamp that is hard to forge. SAML works the same way. Okta plays the government that issues the proof, and each app plays a desk that checks the stamp.
A short history
The standards group OASIS published SAML 1.0 in 2002 and a small update, 1.1, in 2003. SAML 2.0 was approved in 2005 and merged ideas from several earlier efforts. That version is the one used almost everywhere today, and it is the version Okta supports for app sign-in. Okta itself was founded in 2009, and SAML was already one of the main ways enterprise software connected to identity services.
SAML answers one question: “Who is this person?” That is called authentication. It does not by itself decide what the person is allowed to do inside the app. The app decides that, often using extra facts that SAML carries along, such as a group name.
2What Does “SAML (Basic)” Mean in Okta?
Okta does not sell a product literally called “SAML (Basic)”. The phrase is a friendly label for the standard, core way of connecting an app with SAML 2.0.
Inside the Okta Admin Console, an administrator adds an app by choosing Applications, then Create App Integration, and then picking a sign-in method. One of the choices is SAML 2.0. Once chosen, a short guided wizard asks for a handful of settings. The core settings are the web address where the app receives logins, the app’s unique name, the format of the user identifier, and any extra facts to send. When someone says “basic SAML in Okta”, they usually mean this core setup with those core settings.
Okta also offers more advanced options on the same screens. Examples are encrypting the message, enabling single logout, changing the signing algorithm, and setting special authentication context rules. You can use all of those later. A beginner can build a fully working SSO connection without touching any of them.
Two ways to add a SAML app
There are two paths, and both end with the same kind of SAML connection.
Pick from the catalog
Okta keeps a big catalog called the Okta Integration Network, or OIN, with thousands of pre-built app connections. For a popular app such as Salesforce or Zoom, the connection is mostly ready, and the admin only fills in a few app-specific values.
Build a custom SAML app
If an app is not in the catalog, such as a tool your own team built, the admin uses the app integration wizard to create a custom SAML 2.0 connection. Every value is typed in by hand, which makes it a great way to learn how everything fits.
SAML compared with other sign-in methods in Okta
SAML is not the only option. The right choice depends on what the app supports.
| Method | What it does | Typical use | Does the app see the password? |
|---|---|---|---|
| SAML 2.0 | Okta sends a signed identity message to the app | Enterprise and business web apps | No |
| OIDC (OpenID Connect) | Okta sends a signed token built on OAuth 2.0 | Modern web, mobile and single-page apps | No |
| SWA (Secure Web Authentication) | Okta stores the login and fills in the app’s login form for you | Older apps that support no standard | Yes, Okta types it in |
SWA is like a helpful butler who memorizes every password and types it at each door for you. SAML is more like a sealed, stamped letter from a trusted office. The door never learns your password. It only reads the letter and checks the stamp. That is why SAML is considered the cleaner and safer choice whenever an app supports it.
Okta has two generations of its admin screens, often called Classic Engine and Identity Engine. Menu names and button labels differ slightly between them, but the SAML ideas in this guide are the same in both.
3Core Vocabulary You Must Know
SAML comes with its own small dictionary. Learn these twelve words and the rest of the topic becomes much easier.
Identity Provider (IdP)
The system that knows who people are and vouches for them. In this guide it is Okta. Think of it as the passport office.
Service Provider (SP)
The app the person wants to use, such as Slack or Zoom. It relies on the IdP to confirm identity. Think of it as the airport desk that checks the passport.
Assertion
The signed statement from the IdP about the person. It says who they are, when they logged in, and a few facts such as email or group. It is the passport itself.
ACS URL
Short for Assertion Consumer Service URL. It is the web address on the app that receives the assertion. In Okta’s wizard it is called the Single sign-on URL. Think of it as the mailbox where the letter must be delivered.
Audience URI / Entity ID
The unique name of the app, written as a URL-style string. Okta stamps it into the assertion so the letter is addressed to one specific app and no other. In the wizard it is labeled Audience URI (SP Entity ID).
Issuer
The unique name of the IdP. For an Okta app it usually starts with http://www.okta.com/ followed by a unique ID. The app checks that the letter really came from the sender it expects.
Name ID
The main identifier for the person inside the assertion, often their email address. The app uses it to find the matching account.
Attribute Statements
Extra facts about the person, such as first name, last name, department, or job title. Think of them as the lines printed on a name badge.
RelayState
A small note carried along so that after login the person lands on the right page inside the app, such as a specific report, instead of the home page.
Metadata
A file that describes a SAML party: its addresses, names and certificate. Exchanging metadata saves a lot of copy and paste work and avoids typing mistakes.
X.509 Certificate
A digital identity document that holds a public key. Okta signs assertions with a private key, and the app uses the matching public key from this certificate to check the signature.
Binding
The method used to carry a SAML message through the browser. Common ones are HTTP Redirect, where the message rides in the web address, and HTTP POST, where it rides inside a hidden form.
Picture a sealed envelope. The sender name on the outside is the Issuer. The envelope is addressed to one named company, which is the Audience. It must be delivered to a specific mailbox, which is the ACS URL. Inside is a letter about one person, using their Name ID and a few attributes. A wax seal on the letter is the signature, and the seal’s pattern is known from the certificate. Every SAML setting in Okta is one of these parts of the envelope.
4Architecture and Components
A SAML login touches the person, their browser, the app, and several parts inside Okta. Seeing them on one map makes the whole system feel small.
The most important detail in SAML is that the app and Okta usually never talk to each other directly during a login. The person’s browser carries the messages back and forth. That is why SAML works even when the app sits in one company’s data center and Okta sits in another. The two sides only need to trust each other’s signatures, not connect over a private line.
flowchart LR
U["User"] --> B["Web Browser"]
B --> SP["Service Provider App"]
B --> OS["Okta Sign-in Page"]
subgraph TEN ["Okta Tenant"]
OS --> POL["Authentication Policy and MFA"]
POL --> UD["Universal Directory"]
OS --> AI["SAML App Integration"]
AI --> CERT["Signing Certificate"]
AI --> LOG["System Log"]
end
UD --> EXT["Active Directory or HR Source"]
The parts inside Okta
Okta tenant. Your company gets its own private Okta space, called an org or tenant, with its own web address. Everything below lives inside it. Think of the tenant as your company’s own office inside a large shared building.
Universal Directory. This is Okta’s central list of people and their details: name, email, department, manager, and group memberships. It can be filled directly, or it can copy people from other systems such as Microsoft Active Directory or an HR system like Workday. It works like a company phone book that every other part consults.
SAML app integration. This is the object an administrator creates for each app. It stores the ACS URL, the Audience URI, the Name ID rules, and the attribute rules. It is like a customer file kept for one particular app, describing exactly how to write letters to it.
Assignments. An app integration only works for people who are assigned to it. An admin can assign individual users or whole groups. Groups are far easier to manage, because adding someone to a group instantly gives them every app that group is assigned. This is the guest list at the door of the app.
Authentication policy. Rules that decide how strongly a person must prove themselves before Okta issues an assertion. For a payroll app the rule might demand a second factor, such as a phone prompt. For a low-risk app it might be lighter. In older Okta screens this is called a sign-on policy. Think of a security guard who asks for more ID at the vault than at the lobby.
Signing certificate. Each SAML app integration uses a key pair to sign assertions. The private half stays inside Okta. The public half is shared with the app as a certificate. This is the wax seal.
End-user dashboard. The web page where a person sees tiles for every assigned app. Clicking a tile starts a login. This is the lobby with a signboard of every door the person may use.
System Log. A searchable record of what happened: who signed in, to which app, when, and whether it worked. This is the building’s security camera record, and it is the first place to look when a login fails.
A large software company with tens of thousands of employees will usually keep its people in a source of truth such as an HR system, sync them into Okta groups by department, and assign apps to those groups. A new engineer on day one then sees the right set of app tiles with no ticket ever filed.
5How a SAML Login Works Internally
There are two ways a login can start. The person can begin at the app, or begin at Okta. Both end the same way.
Flow one: starting at the app (SP-initiated)
This is the most common flow. The person types the app’s address, or clicks a bookmark, without logging in to Okta first.
sequenceDiagram
participant U as User Browser
participant S as Service Provider App
participant O as Okta Identity Provider
U->>S: Open the app address
S-->>U: Redirect with a SAML request
U->>O: Deliver the SAML request
O-->>U: Show the sign-in page
U->>O: Enter password and extra factor
O-->>U: Return a form holding the signed assertion
U->>S: Post the assertion to the ACS URL
S->>S: Check signature, audience, and time window
S-->>U: Create a session and open the app
The person asks for the app
They open the app’s address. The app notices there is no active session for them.
The app creates an authentication request
The app builds a short SAML request that says, “I am this app, please identify this person.” It sends the browser to Okta with the request attached, usually through the HTTP Redirect binding.
Okta checks for an existing session
If the person already signed in to Okta earlier today, Okta skips the password step. This is why the second and third app of the day open instantly.
Okta authenticates the person
If there is no session, Okta shows its sign-in page and applies the authentication policy, which may include a second factor.
Okta checks the assignment
Okta confirms the person is assigned to this app. If not, the login stops here with an access message.
Okta builds and signs the assertion
Okta fills in the Name ID, the attributes, the Audience, the time window, and then signs the result with the app’s private key.
The browser delivers the assertion
Okta sends back a web page holding a hidden form with the assertion inside. The browser submits it automatically to the app’s ACS URL through the HTTP POST binding.
The app validates everything
The app checks the signature against Okta’s certificate, confirms the Audience is itself, confirms the delivery address matches, and makes sure the time window has not passed.
The app opens a session
The app finds the matching account using the Name ID, starts its own session, and shows the person the page they wanted, using the RelayState if one was sent.
Flow two: starting at Okta (IdP-initiated)
In this flow the person first signs in to Okta and clicks an app tile on the dashboard. Okta skips the app’s request, because the person has already made their choice. It creates the assertion straight away and sends it to the app’s ACS URL.
flowchart LR
A["Person signs in to Okta"] --> B["Dashboard shows app tiles"]
B --> C["Person clicks an app tile"]
C --> D["Okta builds a signed assertion"]
D --> E["Browser posts it to the app ACS URL"]
E --> F["App validates and opens a session"]
| Question | SP-initiated | IdP-initiated |
|---|---|---|
| Where does the person start? | At the app’s own address | At the Okta dashboard |
| Does the app send a request first? | Yes | No |
| Can the app link to a deep page? | Yes, easily | Only with a RelayState |
| Main security concern | Fewer, because the app can match a reply to its request | The app cannot match the reply to any request, so it must be extra careful about replays |
| Common use | Bookmarks, links in email, daily use | Launching from the company portal |
SP-initiated login is like walking up to a club door and being sent to the registration desk across the street, then returning with a stamped card. IdP-initiated login is like being handed a stamped card at the registration desk first and then walking to the club. The club’s bouncer reads the same stamp either way.
6What Is Inside a SAML Assertion?
The assertion is the heart of SAML. Knowing its parts tells you exactly what to check when something goes wrong.
An assertion is an XML document, but you can think of it as a form with labeled boxes. Each box answers a question the app needs answered before it trusts the person.
| Part | Question it answers | Everyday comparison |
|---|---|---|
| Issuer | Who created this message? | The name of the passport office |
| Subject and Name ID | Who is this about? | The name printed on the passport |
| Subject confirmation data | Where may this be delivered, and which request does it answer? | The destination written on a parcel label |
| Conditions: time window | When is this valid? | Issue and expiry dates |
| Conditions: audience restriction | Which app may accept this? | A ticket that names one event only |
| Authentication statement | How and when did the person log in? | A note saying checked in person at 9:02 |
| Attribute statement | What else should the app know? | Extra lines on a name badge |
| Signature | Can I trust that nobody changed this? | The tamper-proof seal |
The time window
Assertions are meant to be used almost immediately. Okta marks each one with a start time and an end time, and the window is short, only a few minutes. If a thief copied an assertion, it would soon be useless. This also means the clocks on the app’s server and on Okta must agree closely. If the app’s clock is wrong by too much, it may think a fresh assertion is already expired.
The signature
Okta signs the assertion by default, and the administrator can also choose to sign the outer response. Signing uses a pair of keys. The private key signs and stays secret inside Okta. The public key, shared through the certificate, lets anyone check the seal but not create one. If a single character in the assertion is changed after signing, the check fails. That is how the app knows that a person did not edit their own group name on the way.
Encryption is a separate choice
Signing proves who wrote the message and that it was not changed. It does not hide the content. The message travels over HTTPS, so outsiders cannot read it on the wire, but the browser itself can see it. For extra privacy, Okta can optionally encrypt the assertion with the app’s public key, so only the app can open it. Most basic setups skip this and rely on signing plus HTTPS.
An app that does not verify the signature, or that only checks the signature on part of the document, is dangerous. A signed assertion is only useful if the receiving app actually checks it, every single time.
7Setting Up a Basic SAML App in Okta
Here is the full journey for a custom app, from an empty screen to a working login. Labels may differ slightly on your screens.
flowchart TD
A["Get the app's ACS URL and Entity ID from the vendor"] --> B["Create App Integration and choose SAML 2.0"]
B --> C["General Settings: name and logo"]
C --> D["Configure SAML: URLs, Name ID, attributes"]
D --> E["Finish the wizard"]
E --> F["Assign people or groups"]
F --> G["Copy Okta SSO URL, Issuer and certificate"]
G --> H["Paste them into the app's SSO settings"]
H --> I["Test SP-initiated and IdP-initiated login"]
Collect the app’s values first
Open the app’s SSO or “SAML” settings page, or its documentation. Find its ACS URL and its Entity ID. These two values are the foundation of the setup, so gather them before you open Okta.
Create the app integration
In the Okta Admin Console go to Applications, choose Create App Integration, select SAML 2.0, and continue.
Fill in General Settings
Give the app a clear name. This is the name people see on their dashboard tile, so choose something recognizable. A logo is optional.
Configure SAML
Paste the app’s ACS URL into Single sign-on URL, and its Entity ID into Audience URI (SP Entity ID). Choose the Name ID format and the Application username. Add attribute statements if the app needs more than the identifier.
Finish the wizard
The last step asks whether you are an Okta customer adding an internal app or a software vendor. Pick the first for your own apps and finish.
Assign people or groups
Open the Assignments tab and add the groups that should have access. Prefer groups over individuals.
Hand Okta’s details to the app
On the Sign On tab, open the setup instructions. Okta shows three things: the Identity Provider Single Sign-On URL, the Identity Provider Issuer, and the X.509 certificate. A metadata link is also offered, and many apps can read it directly. Paste these into the app’s SSO page.
Test both ways
Open the app’s address in a private browser window to test the SP-initiated flow. Then click the tile on the Okta dashboard to test the IdP-initiated flow. Use a test user, not an administrator, so you see what normal people see.
The core fields in plain words
| Okta field | What it means | Where the value comes from |
|---|---|---|
| Single sign-on URL | The mailbox where Okta delivers the assertion (the ACS URL) | The app vendor |
| Audience URI (SP Entity ID) | The unique name of the app that the assertion is addressed to | The app vendor |
| Default RelayState | An optional starting page inside the app after login | You decide, if the app supports it |
| Name ID format | The style of the main identifier, such as email address or unspecified | The app vendor’s requirement |
| Application username | Which Okta field becomes the identifier, such as Okta username or email | You decide, matching what the app stores |
| Attribute statements | Extra facts to send, such as first name and last name | The app vendor’s list of required names |
| Group attribute statements | Which group names to send, chosen with a filter | You decide, matching the app’s role rules |
Copy the vendor’s URLs exactly. A missing slash at the end, “http” instead of “https”, or a different capital letter is enough to make the Audience or the destination fail to match. Most beginner failures come from one mistyped character.
Setting up SAML is like two companies exchanging business cards. The app gives Okta its address and its official name. Okta gives the app its own address, its official name, and a sample of its signature. Once both cards are in each other’s hands, either side can recognize the other from then on.
8Name ID, Attributes and Group Mapping
The connection works only if the app can match the incoming person to an account it already has. That is the job of the Name ID and the attributes.
Choosing the Name ID
The Name ID is the app’s primary key for finding the person. Okta lets you pick its format. The usual choices are:
- EmailAddress. The person’s email is sent. Easy to understand, and what many apps expect.
- Unspecified. The app and Okta agree privately on what the value means. This is the most common default in Okta.
- Persistent. An opaque, never-changing code for the person, meaning a code that reveals nothing about them.
- Transient. A random code that changes at each login, used when the app should not recognize returning people.
Next, the Application username setting tells Okta which of its own fields to place into the Name ID. Typical choices are the Okta username or the primary email. Whatever you choose, it must match exactly what the app already has on file, including capital letters.
The Name ID is like the employee number on a gym membership. The desk does not care how you look. It only types in the number and finds your file. If the number you are told does not match the number in the gym’s list, the desk cannot find you, even though you are clearly a member.
If you use email as the Name ID and a person later changes their email, the app may treat them as a brand new stranger and create a second account. For long-lived accounts, a stable identifier that never changes is safer. Plan this early, because changing it later is painful.
Attribute statements
Attribute statements are optional extra facts. You give each fact a name that the app expects, and you choose which Okta profile field supplies the value. Okta uses a small expression language for this, where something like user.email means “this person’s email”. For example, an app may need the names firstName, lastName and department. You then map each name to the matching Okta field.
Many apps use these facts for Just-In-Time provisioning. That means the first time a person logs in, the app creates their account automatically from the information in the assertion. This saves setup time, but it only creates accounts. It does not remove them. For automatic removal when a person leaves, the app needs a separate provisioning feature, often built on a standard called SCIM, which is a different topic from SAML.
Group attribute statements
Apps often grant roles based on group membership. A group attribute statement tells Okta to include the person’s group names in the assertion. Because a person may belong to hundreds of groups, you add a filter so that only relevant ones are sent. The filter can match groups that start with a prefix, equal an exact name, contain some text, or match a pattern. A common habit is naming groups with a shared prefix such as “app-slack-“, then filtering on that prefix.
Example: roles in a team chat app
A company sets up groups named for roles, such as admins and members. The SAML app sends the group names as an attribute. The chat app reads the attribute and gives admin rights only to people whose assertion lists the admin group. Moving someone out of the Okta group removes the right at their next login.
At a large conference, everyone wears a badge with a name. Some badges also carry colored ribbons for roles such as speaker or volunteer. The name is the Name ID. The ribbons are attributes and group claims. The door staff do not phone the organizers each time. They read the badge in front of them.
9Data Flow and Lifecycle
A SAML connection has a life: it is created, used, changed, and eventually retired. So does each person who uses it.
A person joins
The person is created in Okta, usually by an HR source or a directory sync. They are placed in groups according to their department or role.
Access is granted by group
Because the groups are assigned to SAML apps, the tiles appear on the person’s dashboard. No individual setup is needed for each app.
Daily use
The person signs in to Okta once, passing the authentication policy. Each app tile then sends a fresh assertion. The app creates its own session based on it.
The person changes roles
Group memberships change. At the next login, the assertion carries the new group names, and app permissions follow.
The person leaves
The account is deactivated in Okta. Okta will no longer issue assertions for that person, so no new app sessions can start.
Two sessions, not one
Beginners are often surprised to learn that there are two separate sessions. The first is the Okta session, which proves the person is signed in to Okta. The second is the app session, which the app creates after reading an assertion. They have independent lengths. If an employee is deactivated in Okta, a session that the app already opened may still be alive until it expires. That is why short app session lengths, and automatic deprovisioning where possible, matter for offboarding.
Signing out
Signing out of one place does not automatically sign out of the other. SAML includes an optional feature called Single Logout, or SLO, which lets one logout ripple to the other side. Okta can enable it for an app, but it requires careful setup on both sides and many apps do not support it well. A good beginner rule is to rely on sensible session lengths and treat SLO as an extra.
The certificate lifecycle
The signing certificate has an expiry date, usually many years away, which makes it easy to forget. When it nears expiry, the administrator generates a new certificate in Okta, gives the new public certificate to the app, and then makes the new one active. If the order is wrong, or the app is not updated in time, every login for that app fails at once. Rotation should be a planned calendar event, not a surprise.
An assertion is a paper ticket valid for one gate for a few minutes. The app session is the wristband you get after passing the gate, and it lasts for the day. The signing certificate is the ticket office’s official stamp, which is replaced every few years. Three things, three very different lifetimes.
10Security in a SAML Setup
SAML is strong when both sides do their checks. Most real incidents come from a missed check, not from broken math.
What the app must check on every login
- The signature. It must be valid and made with the certificate the app trusts for this Okta app.
- The issuer. The assertion must come from the exact Okta app the administrator configured.
- The audience. The assertion must name this app, and no other. This stops a letter meant for one app from being used at another.
- The recipient and destination. The delivery address inside the assertion must match the address that actually received it.
- The time window. The current time must be inside the start and end times, allowing only a very small clock difference.
- The request match. For SP-initiated logins, the reply must refer back to the request that the app really sent.
- No reuse. The unique ID of each assertion should be accepted only once, so a captured copy cannot be replayed.
What Okta adds on its side
Multi-factor authentication, or MFA, means proving identity with more than one kind of proof, such as a password plus a prompt on a phone. In Okta, the authentication policy for each app decides when MFA is required. Because SAML apps never see the password, strong checks done once at Okta protect every connected app. This is a big security win: you harden one door instead of sixty.
Okta also lets administrators limit access by network location, device state, and risk signals, all before an assertion is created. If the policy says no, no assertion is ever made.
Well-known attacks, in simple terms
Signature wrapping. An attacker hides a forged section inside a validly signed document, hoping the app checks one part and trusts another. Defense: use mature SAML libraries from trusted vendors and keep them updated, rather than writing signature code by hand.
Replay. An attacker captures a real assertion and sends it again. Defense: short time windows, request matching, and one-time IDs.
Redirect abuse. The RelayState is a value that sends the person somewhere after login. If an app blindly follows it, an attacker could bounce a person to a fake site. Defense: the app should only allow redirects to its own known pages.
Phishing. A fake sign-in page steals the Okta password. Defense: phishing-resistant factors, such as hardware keys or Okta FastPass, and training people to start at the real dashboard.
Protect the admins
Anyone who can edit a SAML app in Okta can change where assertions are sent. That makes administrator accounts the most valuable targets. Give admin rights to as few people as possible, require strong MFA for them, and review the System Log for admin changes.
Never accept unsigned assertions in production, never disable audience checking to “make it work”, and never share one Okta app integration between two different apps. Each of those shortcuts removes a lock that SAML depends on.
A bank vault has several protections: a thick door, a guard, a camera, and a time lock. SAML security is the same layered idea. A signed message, a named audience, a short time window, and a one-time ID each stop a different kind of cheat. Removing any one layer makes the vault easier to rob.
11Monitoring, Logging and Troubleshooting
When a login fails, the person sees a vague error. The real reason is almost always visible in two places: the Okta System Log and the SAML message itself.
The Okta System Log
The System Log records each sign-in attempt, including the person, the app, the time, the result, and the reason for failure. Administrators can search it by person or by app. Sign-in events to a SAML app appear as single sign-on events, and failures include a short reason. This is the first stop for any “it does not work for me” report.
Looking at the real message
Because SAML messages pass through the browser, a free browser extension named SAML Tracer can display them. It shows the request, the response, and the decoded assertion with every box filled in. Compare what Okta sent with what the app expects, and the difference is usually obvious. Treat these captures as sensitive, because they hold personal data.
Common problems and their usual cause
| Symptom | Usual cause | Fix |
|---|---|---|
| App says audience mismatch | Audience URI in Okta differs from the app’s Entity ID | Copy the exact value from the app, character by character |
| App says destination or recipient mismatch | Wrong or mistyped Single sign-on URL | Correct the URL, including http versus https |
| Signature invalid | The app holds an old or wrong certificate | Upload the current Okta certificate to the app |
| Assertion expired or not yet valid | Clock difference between the servers | Fix time synchronization on the app side |
| Login works but app finds no account | Name ID does not match the stored username | Change Application username or Name ID format |
| Person lands in app with wrong role | Group attribute name or filter mismatch | Adjust the attribute name and the group filter |
| Okta says person is not assigned | Person or their group is missing from Assignments | Assign the correct group |
What to watch over time
- Success and failure rate per app. A sudden spike in failures for one app often means a certificate or configuration change.
- Certificate expiry dates for every SAML app. Keep a list and set a reminder well ahead of time.
- MFA failures for a single person across many apps, which can signal a stolen password.
- Administrator changes to SAML app settings, which should be rare and reviewed.
Check in this order: first, is the person assigned? Second, what does the System Log say? Third, what does the captured assertion contain? Fourth, how do those values compare with the app’s settings? This order finds the problem faster than random guessing.
Debugging SAML is like solving a failed parcel delivery. Check the sender record (System Log), open the parcel to see the label (SAML Tracer), and compare the label to the real address (the app settings). Nearly every failure is a label that does not match the address.
12Advantages, Disadvantages and Trade-offs
No technology is perfect. Knowing the trade-offs helps you choose SAML for the right jobs.
Advantages
- One login for many apps, so fewer passwords to remember.
- The app never sees or stores the password.
- Strong checks such as MFA are applied once, centrally.
- Instant access control: remove a person at Okta and new logins stop.
- Open standard, supported by thousands of enterprise apps.
- Pre-built catalog connections make setup quick for popular apps.
- Central records of who signed in where.
Disadvantages
- Setup has many small values, and one typo breaks everything.
- XML and signatures are hard to read and debug by eye.
- Built for web browsers, so it fits mobile and API apps poorly.
- Existing app sessions can outlive a deactivation in Okta.
- Single logout is unreliable across vendors.
- Certificate expiry can cause sudden outages if not tracked.
- Okta becomes a critical dependency for access to everything.
Trade-offs to think about
One key opens many doors
SSO is wonderful for users, but if one account is taken over, an attacker can reach every app tied to it. The answer is stronger MFA at Okta, not abandoning SSO.
Basic versus advanced settings
The basic setup is quick and covers most needs. Encryption, single logout and custom contexts add safety or features but also add more things that can go wrong. Add them only for a clear reason.
Okta as a single point of dependence
If Okta is unreachable, new logins to every SAML app can fail. Companies reduce the risk with a documented emergency admin login inside critical apps and an incident plan.
Older and wide versus newer and light
SAML is deeply entrenched in enterprise software. OIDC is lighter and friendlier to mobile and modern apps. Many companies use both, choosing per app.
13Design Patterns, Anti-patterns and Best Practices
Teams that run SAML well share a few habits. Teams that struggle share a few mistakes.
Patterns that work
Assign by group, never by person
Create groups for roles and teams, then assign apps to groups. Joiners, movers and leavers then need only a group change.
One integration per environment
Create separate Okta app integrations for test and production copies of an app. Each has its own URLs, so a test mistake can never touch production.
Naming rules for groups and attributes
Use a clear, shared naming habit so filters are simple and anyone can understand what a group does.
Certificate calendar
Record each certificate’s expiry date, owner, and rotation steps. Rotate on a schedule in a quiet time window.
Emergency access
Keep one tightly protected local administrator login in each critical app, with its use logged and reviewed, for the day Okta is not reachable.
Metadata over copy and paste
When both sides support metadata, use it. It removes typing errors and makes certificate updates smoother.
Anti-patterns to avoid
What people do
They assign each app to individual people, one by one, because it feels faster for the first few users.
Why it hurts
After a year nobody knows who has access or why. Leavers are missed, and audits become a painful spreadsheet exercise.
Do this instead
Always assign groups, and make group membership the single place where access decisions are recorded.
What people do
When a login fails, they switch off audience or signature checking in the app “just to get past the error”.
Why it hurts
The error was a warning that a value did not match. Removing the check lets assertions meant for other apps, or forged ones, be accepted.
Do this instead
Find the mismatch with the System Log and a captured assertion, and fix the value. Keep every check turned on.
What people do
They reuse one Okta app integration for several apps or several environments to save a few minutes.
Why it hurts
The shared certificate and Audience mean one compromise or one change affects everything. It also hides which app caused a problem.
Do this instead
One integration per app per environment, each with its own settings and certificate.
Common beginner mistakes
- Testing only as an administrator, so access problems for normal people are never seen.
- Forgetting to assign any group, then wondering why the tile does not appear.
- Choosing a Name ID that does not match the usernames stored in the app.
- Letting the certificate expire with no reminder.
- Mixing up the app’s Entity ID with Okta’s Issuer, which are two different names for two different parties.
- Leaving old test apps active in the production Okta org.
14Beyond the Basics: Performance, Availability and Advanced Options
Once the basic connection works, a few extra topics decide whether it stays smooth at scale. Each one below is optional, and each can be added later.
Performance and scale
Building an assertion is a small piece of work: Okta looks up the person, applies the policy, fills in a few boxes, and signs the result. The slow part of a login is almost always the human, who types a password or approves a phone prompt. Because the app session lasts for hours, a person usually triggers only a handful of assertions per day. Even a company with fifty thousand employees creates a modest, steady flow of requests, with a spike each morning when everyone arrives. The busiest moment is the start of the working day, so test new apps outside that rush and avoid forcing every app session to expire at exactly the same hour.
Think of a stadium entrance. Checking one ticket takes a second. The queue forms only because thousands of fans arrive together. Spreading arrival times, and opening more gates, keeps the line short without making each check any faster.
Availability and reliability
Okta runs as a cloud service built to stay available, but your own setup still matters. Keep a record of every SAML app, who owns it, and which certificate it uses. Keep emergency access in each critical app. Have a written plan for what the help desk says if sign-in is slow. A good plan also lists which apps are essential during an outage, such as the pager tool that on-call engineers need, so those get a backup login first.
Single Logout
Single Logout asks every connected app to end its session when the person signs out of one place. It sounds perfect, but it needs both sides to support the same logout messages and to agree on how sessions are named. When one app ignores the request, the person believes they are signed out while one session remains open. Many teams skip it and choose short app sessions instead.
Assertion encryption
If you turn on encryption, the app must give Okta its public certificate, and Okta locks the assertion with it. Only the app’s private key can open it. This protects the content from the browser and from any tool that records traffic, at the cost of one more certificate to track and one more thing that can expire.
Signature and digest algorithms
Signing involves a math recipe, and Okta lets you choose the recipe. The common modern choice is based on the SHA-256 family, and it is a strong default. Pick something older only if an ancient app refuses anything else, and plan to upgrade that app.
Authentication context and forced login
Some apps ask Okta for a certain strength of login, or demand that the person log in again even if a session exists. Okta can honor this, which is helpful for sensitive actions such as approving a large payment. Use it sparingly, because every forced login adds friction for the person.
Provisioning with SCIM
SCIM is a separate standard for creating, updating, and removing accounts in an app automatically. Pairing SAML with SCIM gives the full lifecycle: SAML handles the login, and SCIM keeps the account list in step with Okta. When a person leaves, SCIM can disable their account inside the app immediately, which closes the gap left by long app sessions.
SAML is the front-door guard who checks tickets as people arrive. SCIM is the office that keeps the guest list up to date, adding new names and crossing off the ones who left. A building with a guard but no updated list is only half protected.
Okta as a service provider
So far Okta has been the identity provider. It can also be the receiving side, trusting another identity provider such as a partner company’s system. The same ideas apply with the roles reversed: Okta now publishes an ACS URL and an Entity ID, and the partner signs assertions that Okta checks. Knowing the basic pattern makes both directions easy to follow.
15Real-World and Industry Examples
SAML shows up wherever many people use many business apps. These typical scenarios show how basic SAML in Okta is used in practice.
Well-known business apps such as Salesforce, Slack, Zoom, Box, Atlassian Cloud, Workday and ServiceNow all support SAML 2.0 for single sign-on, and Okta’s catalog contains pre-built connections for a very large number of apps like these. That means a company can connect them using the same basic pattern again and again.
A global software company onboarding engineers
New hires are created in Okta from the HR system. Department groups are assigned to the code hosting service, the chat tool, the ticketing system and the video meeting tool. On day one the engineer logs in once and sees all four tiles. When the engineer moves to another team, a group change updates all access with no tickets.
A hospital protecting sensitive systems
Doctors and nurses need quick access, because every second counts at a bedside, but patient systems need strong security. The hospital uses an authentication policy that demands a second factor for patient records and a lighter check for the staff cafeteria menu. The records system never sees any passwords, only signed assertions from Okta.
A university serving students and staff
Thousands of students arrive every year and leave later. Group membership is based on student, teacher, or administrator status. Course tools, library systems and email all use SAML, so a graduation date change in one place switches off access everywhere at the next login.
A company after an acquisition
When one company buys another, the new employees can be brought into the same Okta org quickly. Their existing apps get SAML connections, and a single dashboard gives them access to both companies’ tools without making everyone create dozens of new passwords.
A team that built its own internal tool
An in-house reporting tool is not in any catalog. The team adds SAML support using a standard library, creates a custom SAML 2.0 app integration in Okta, and gets company-grade login and MFA without building a password system of its own.
16Frequently Asked Questions
17Summary and Key Takeaways
SAML in Okta is, at heart, a trusted way for an identity provider to tell an app who a person is, using a signed message that the browser carries. The basic setup needs only a few values, and mastering those few values gives you the foundation for every more advanced feature.
Key Takeaways
- SAML (Basic) in Okta is the core SAML 2.0 app integration: Okta is the identity provider, the app is the service provider, and a signed assertion proves who the person is.
- Four values matter most: the app’s ACS URL, its Audience URI or Entity ID, the Name ID rule, and any attribute or group statements. Most failures come from one of these not matching exactly.
- The browser carries every message, so Okta and the app only need to trust each other’s signature, with SP-initiated and IdP-initiated flows both ending in the same assertion.
- Security lives in the checks: signature, issuer, audience, destination, time window and one-time use must all be verified by the app, and MFA is enforced once at Okta.
- Assign by group, use one integration per app per environment, and keep a calendar for certificate rotation.
- Remember the two sessions: deactivating someone in Okta blocks new logins but does not always end an existing app session.
- Debug in order: assignment first, then the System Log, then the captured assertion, then the app’s settings.