Skip to content

Decision tool

RFP builder.

Fill in the form on the left; the right pane updates a vendor-ready CIAM RFP in Markdown. Copy to clipboard or download as a `.md` file. Edit the result freely after, this is a starting point, not a substitute for your procurement template.

Requirements are written as testable assertions with the acceptance test attached, because a capability name is answered yes by every vendor and predicts nothing. The full lists, with the reasoning behind each line, are in B2B authentication requirements and B2C authentication requirements. Select only what you need; a padded list gets a padded response.

RFP inputs

About
Scope
Requirements

Each line carries an acceptance test that goes into the generated RFP. Trim it to what you actually need, because a padded requirement list gets a padded response.

Authentication and federation

  • Why, and how to verify

    This is the line item that unblocks enterprise deals. Everything else in this document assumes it works.

    Verify: Complete an end-to-end login against both a Microsoft Entra test tenant and an Okta developer org. Two IdPs, because supporting one is not supporting SSO.

  • Why, and how to verify

    An assertion accepted before validation is an authentication bypass. Verification after identity resolution is the same bug with extra steps.

    Verify: Submit a tampered signature, a wrong audience, an expired assertion, and a replay of a previously valid one. All four must be rejected, and each rejection must appear in a log you can query.

  • Why, and how to verify

    Without it you are inferring tenancy from the email domain, which breaks on shared domains, acquisitions, and contractors.

    Verify: Inspect the callback payload. Confirm a connection or organization identifier is present and stable across logins, and that it is not the email domain.

  • Why, and how to verify

    The alternative is a separate 'Sign in with SSO' button that enterprise users never find, which turns into a support ticket per new employee.

    Verify: Enter an address on a claimed domain and confirm the redirect happens with no password field shown. Enter an unclaimed address and confirm the self-serve path is offered instead.

  • Why, and how to verify

    One enterprise customer's security team will require MFA before another customer is ready for it. A global switch means you cannot satisfy both.

    Verify: Enforce MFA on tenant A and not on tenant B in the same environment. Confirm enforcement at login and at step-up, and confirm tenant B is unaffected.

  • Why, and how to verify

    A federation rollout that cannot be turned off is a rollout you cannot start. The destructive version of a kill switch, where disabling SSO deletes the users it created, is worse than having none.

    Verify: Enable for one tenant in staging, provision users, then throw the kill switch. Confirm users, workspaces, memberships, and roles all survive, and confirm the documented behaviour of sessions already in flight.

  • Why, and how to verify

    Most B2B products add enterprise SSO to a live self-serve product. A platform that requires migrating every existing user before the first enterprise customer goes live has turned a two-week integration into a two-quarter project.

    Verify: Run both paths in one environment. Confirm a single human reachable through both does not produce two accounts, and that the incumbent path is untouched by the new one.

Identity model and account linking

  • Why, and how to verify

    This is the deepest lock-in vector in the category, and it does not look like lock-in on day one. If the vendor's user object is your user object, your data model is rented and your migration cost grows with every feature you ship.

    Verify: Confirm you can hold your own user row, keyed by your own identifier, with the vendor's subject stored as one more foreign key on it. If the integration guide tells you to key application tables on the vendor's ID, that is the finding.

  • Why, and how to verify

    Identifiers propagate. Once a vendor subject is in your URLs, your API responses, your data warehouse, and your customers' integrations, it is no longer a vendor identifier, it is your public contract.

    Verify: Create a user carrying your own identifier and confirm every relevant API accepts a lookup by it, or by an external-ID mapping you control.

  • Why, and how to verify

    Automatically linking an unverified asserted email to an existing account is an account-takeover primitive. You cannot make a safe linking decision without knowing which of the two facts the platform is actually asserting.

    Verify: Ask for the exact field names and their semantics, then configure a connection that asserts an unverified address and confirm the flag changes.

  • Why, and how to verify

    Silent merges are unrecoverable. Two humans become one record, and the audit trail that would let you unpick it is the thing you just merged.

    Verify: Sign in through a second connection with an address that already exists locally. Confirm the outcome is the documented one, and that a merge, if it happens at all, is an explicit action you triggered.

Organization modelling and provisioning

  • Why, and how to verify

    One membership per user is the assumption that is cheapest to adopt and most expensive to remove. Contractors, agencies, and acquisitions all produce a legitimate two-organization human.

    Verify: Put one identity into two organizations. Confirm both memberships exist with independent roles, and that the platform can tell you which one a given session is acting in.

  • Why, and how to verify

    Without it, every new enterprise connection needs an operator to pre-create the workspace, which puts your team on the critical path of your customer's rollout.

    Verify: Sign in from a fresh domain. Inspect the resulting organization, membership, and role assignment, and confirm the first user is an owner rather than a member with no administrative path.

  • Why, and how to verify

    The customer you already signed has a workspace, users, and data. Their first SSO login must land there rather than somewhere new.

    Verify: Attach a connection to a pre-existing workspace that already has content, then sign in. Confirm the user lands in the existing workspace with the existing data intact.

  • Why, and how to verify

    This is the control that stops your largest customer from silently acquiring a second, empty, shadow workspace on the day they turn on SSO. Support finds out when the customer asks where their data went.

    Verify: Add a domain to the gated list, then attempt a JIT login from it. Confirm the attach path runs and no new workspace is created.

Customer self-service onboarding

  • Why, and how to verify

    Connection setup is the single largest source of implementation support load in B2B identity, and it is work only the customer's IT admin can do.

    Verify: Generate a portal link as an operator, then complete a full connection as the customer with no involvement from your team. Time it.

  • Why, and how to verify

    Otherwise every misconfigured attribute mapping in your customer base becomes a ticket in your queue, escalated to a vendor you are relaying for.

    Verify: Deliberately misconfigure an attribute mapping and a certificate, then read the error as the customer admin sees it. An opaque failure code is the finding.

  • Why, and how to verify

    A SAML signing certificate expires on a date nobody has in a calendar, and the first symptom is an enterprise customer unable to log in on a Monday morning.

    Verify: Establish the notification lead time, the channel, and who receives it. 'It is visible in the dashboard' means nobody receives it.

Directory sync and deprovisioning

  • Why, and how to verify

    SCIM conformance is a long tail of per-IdP quirks. Hosting the endpoint yourself means owning that tail forever.

    Verify: Confirm the endpoint is theirs, and that the events reaching you are normalized rather than raw per-IdP payloads you have to reconcile.

  • Why, and how to verify

    Your user row has foreign keys, content ownership, and audit history hanging off it. A forced delete originating outside your system is a data-integrity incident, not a lifecycle feature.

    Verify: Deprovision a user who owns content. Confirm you received an event and that nothing was removed on your side until you acted on it.

  • Why, and how to verify

    They mean different things. One is an offboarding you should reflect by suspending access and keeping the record; the other is a deletion request. Collapsing them forces you to guess.

    Verify: Trigger each separately from the IdP and confirm two distinguishable events arrive, with the distinction visible in the payload rather than inferred.

  • Why, and how to verify

    Group-driven roles are what makes access management self-service for the customer. Without it, IT provisions the user and then emails you about their permissions.

    Verify: Add to a group, remove from a group, and rename a group. Removal and rename are handled less reliably than addition in most implementations, and rename breaks anything keyed on display name.

  • Why, and how to verify

    This number goes into your security questionnaire answers and your customer contracts. Half of it is not yours to control, and you need to know which half before you commit to it in writing.

    Verify: Ask for the split explicitly. Then measure it yourself against both IdPs, because the documented figure is rarely the one you will observe.

  • Why, and how to verify

    Retries happen. A non-idempotent provisioning pipeline turns a transient network failure into duplicate users or a double role grant.

    Verify: Replay an identical operation several times. Confirm exactly one state change, no duplicate records, and no additional outbound events.

  • Why, and how to verify

    A shared token across connections means one customer's leaked credential is every customer's exposure. Failing open on an auth error means an unauthenticated request can mutate your directory.

    Verify: Send a request with a revoked token and confirm it fails before any state change. Then rotate a live token and confirm provisioning continues.

  • Why, and how to verify

    An IdP offboarding an administrator will happily orphan a paying workspace, and nobody notices until someone needs to change a billing detail nobody can reach.

    Verify: Deprovision the sole owner of a test workspace. Confirm you can detect the condition before applying it, rather than discovering it afterwards.

  • Why, and how to verify

    RFC 7644 permits both a pathed and an unpathed replace operation. A platform that handles one and rejects the other works for half your enterprise customers and fails for the rest.

    Verify: Send both shapes. Each must deactivate the user rather than return a 400, and each must produce the same local state.

Sessions

  • Why, and how to verify

    Two session authorities in one browser means two expiry policies, two logout paths, and a class of bug where a user is signed out of one and not the other.

    Verify: Complete a login and inspect the cookie jar. Confirm your own session cookie remains authoritative and that the vendor's is either absent or not load-bearing.

  • Why, and how to verify

    Enterprise security teams ask for all three by name, and single logout in particular is frequently claimed and rarely tested.

    Verify: Trigger a logout from the IdP side and confirm the application session actually ends, rather than surviving until its own expiry.

  • Why, and how to verify

    A revocation you cannot time is a revocation you cannot put in an incident-response runbook. Cached access tokens frequently remain valid well past the revocation call.

    Verify: Revoke an active session and measure, on a real client, how long until requests actually fail.

Audit and observability

  • Why, and how to verify

    Identity events are evidence. Evidence that lives only in a vendor console, under that vendor's retention policy, is evidence you will not have when you need it.

    Verify: Subscribe, trigger a connection change and a sync, and confirm both arrive with enough detail to reconstruct what happened.

  • Why, and how to verify

    Provisioning breaks silently. An expired token or a changed mapping produces no failing request, so there is nothing to alert on unless absence itself is the signal.

    Verify: Revoke a working sync token without telling anyone, wait 48 hours, and record what arrived. Usually nothing does, and that tells you which alarm you have to build.

  • Why, and how to verify

    Retention is a pricing lever rather than a security decision, and the tier with a usable window is rarely the tier in the quote.

    Verify: Get the number in days for your specific tier, in writing, alongside whether streaming is available on it.

  • Why, and how to verify

    An audit log you have to populate yourself is a storage product. Both models are defensible, and discovering which one you bought after the compliance review has started is not.

    Verify: Ask directly, then check an event you did not emit. If nothing is there, you have your answer.

  • Why, and how to verify

    Undocumented event shapes become a parsing dependency on a vendor's unannounced changes, and the breakage surfaces in your detection rules rather than in your build.

    Verify: Request the schema documentation and its versioning policy. Ask how the last breaking change was communicated.

Privacy and data lifecycle

  • Why, and how to verify

    A single human may be a password identity, two social subjects, and a federated identity. An erasure obligation covers all of them, and an API that only answers per-provider makes completeness impossible to prove.

    Verify: Link several identities to one user, then call the enumeration and confirm every subject is returned in one response.

  • Why, and how to verify

    Under GDPR the controller has to demonstrate erasure, not merely request it. A deletion with no confirmation is not evidence.

    Verify: Delete through the API and capture the response. Then confirm the record is genuinely gone rather than flagged, and establish the backup retention window.

  • Why, and how to verify

    Residency is frequently available for the primary store and not for logs, backups, or support tooling, and the gap is what an auditor finds.

    Verify: Ask specifically where logs and backups live, not only the primary datastore.

Security posture

  • Why, and how to verify

    Your own enterprise customers will ask for evidence about your sub-processors, and you cannot answer for a vendor that cannot answer for itself.

    Verify: Read the report rather than the badge. Check the observation period, the exceptions, and whether the identity product is actually in scope.

  • Why, and how to verify

    'Encrypted at rest' is universally claimed and describes disk encryption as readily as it describes a considered key hierarchy.

    Verify: Ask which algorithm hashes passwords, at what cost parameters, and who can access the keys.

  • Why, and how to verify

    Registration, login, and recovery have different abuse profiles, and a single global threshold is either too loose for login or too tight for recovery.

    Verify: Run a credential-stuffing traffic pattern rather than a clean load test, and observe what engages and what it returns.

  • Why, and how to verify

    An undocumented limit is discovered in production, usually during your largest customer's onboarding, when their initial directory sync fires thousands of requests at once.

    Verify: Get the numbers and the dimensions in writing. Then confirm one large tenant cannot exhaust a limit on behalf of every other tenant.

Portability and exit

  • Why, and how to verify

    Import tooling is a sales function and export tooling is a retention risk, so the two are rarely built to the same standard. Without hash export, leaving means a forced password reset for your entire user base.

    Verify: Request an export during evaluation and import one hash into a sandbox elsewhere. Confirm the contract clause covers credentials and not only 'customer data'.

  • Why, and how to verify

    A profile-only export leaves the structure behind, and the structure is the part you spent two years building.

    Verify: Export everything during the POC and check what is missing. Configuration is usually the gap.

  • Why, and how to verify

    A passkey is scoped to the RP ID it was created against. If login moves to a vendor-owned domain, every existing passkey is invalidated on the day you migrate, regardless of any export.

    Verify: Establish which domain is the RP ID, whether you control it, and whether credential ID, public key, and sign count can be exported.

Commercial and support

  • Why, and how to verify

    Cost failures in this category are almost never the unit price. They are a feature gate discovered in year two, when the enterprise customer who needs it is already signed.

    Verify: Take your MAU curve, enterprise-tenant count, and this requirement list to each vendor, and ask which lines change the tier.

  • Why, and how to verify

    The first federated customer surfaces every ambiguity in the integration at once, and usually on the customer's timeline rather than yours.

    Verify: Confirm it is contractual rather than a POC courtesy, and establish what happens to the channel after go-live.

  • Why, and how to verify

    An estimate given against a feature list is always weeks. An estimate given against acceptance tests is the honest number, and the difference between the two is the most useful thing you will learn during evaluation.

    Verify: Ask for it in writing with the requirement IDs referenced, then compare it against what the POC actually took.

Compliance
Timeline

Generated RFP

# Customer Identity & Access Management (CIAM), Request for Proposal

**Company:** [Company name]
**Contact:** [Contact name]
**Submission deadline:** [Date]

## 1. About us

[Brief description of company, product, and current identity stack.]

## 2. Project scope

- **Customer segment:** B2B SaaS / enterprise
- **Current MAU:** 10,000
- **12-month projected MAU:** 100,000
- **Geographic region:** US + EU
- **Deployment preference:** Managed SaaS only

## 3. Functional requirements

45 requirement(s), of which 23 are MUST. A MUST that
cannot be met should be called out explicitly in your response rather than
answered generally, because we will treat an unqualified "yes" against a
requirement that fails its acceptance test as a disqualifying answer.

Each requirement below carries the acceptance test we intend to run during
evaluation. Please respond per requirement ID with one of:

- **Met**: shipped today, and we can demonstrate the acceptance test.
- **Partial**: describe exactly what is and is not covered.
- **Roadmap**: give a date and say whether it is committed or aspirational.
- **Not met**, and tell us what you would suggest instead.

### Authentication and federation

How an enterprise user proves who they are, and what the platform does with the assertion afterwards.

#### AUTH-01 · MUST

Enterprise users can sign in with SAML 2.0 or OIDC against their own identity provider.

*Why this is on the list:* This is the line item that unblocks enterprise deals. Everything else in this document assumes it works.

*How we will verify it:* Complete an end-to-end login against both a Microsoft Entra test tenant and an Okta developer org. Two IdPs, because supporting one is not supporting SSO.

#### AUTH-02 · MUST

Assertions are cryptographically verified (signature, issuer, audience, recipient, expiry) before any identity is resolved.

*Why this is on the list:* An assertion accepted before validation is an authentication bypass. Verification after identity resolution is the same bug with extra steps.

*How we will verify it:* Submit a tampered signature, a wrong audience, an expired assertion, and a replay of a previously valid one. All four must be rejected, and each rejection must appear in a log you can query.

#### AUTH-03 · MUST

The assertion carries the organization or connection identifier, so the application can resolve which workspace the user lands in.

*Why this is on the list:* Without it you are inferring tenancy from the email domain, which breaks on shared domains, acquisitions, and contractors.

*How we will verify it:* Inspect the callback payload. Confirm a connection or organization identifier is present and stable across logins, and that it is not the email domain.

#### AUTH-04 · SHOULD

The login flow supports identifier-first SSO detection: the user types an email, the platform detects an enterprise account, and routes to SSO.

*Why this is on the list:* The alternative is a separate 'Sign in with SSO' button that enterprise users never find, which turns into a support ticket per new employee.

*How we will verify it:* Enter an address on a claimed domain and confirm the redirect happens with no password field shown. Enter an unclaimed address and confirm the self-serve path is offered instead.

#### AUTH-05 · SHOULD

Multi-factor policy is enforceable per organization, not only globally.

*Why this is on the list:* One enterprise customer's security team will require MFA before another customer is ready for it. A global switch means you cannot satisfy both.

*How we will verify it:* Enforce MFA on tenant A and not on tenant B in the same environment. Confirm enforcement at login and at step-up, and confirm tenant B is unaffected.

#### AUTH-06 · SHOULD

SSO is enablable per tenant and per environment behind a flag, with a kill switch that stops new SSO logins and falls back to the incumbent path without destroying provisioned users or workspaces.

*Why this is on the list:* A federation rollout that cannot be turned off is a rollout you cannot start. The destructive version of a kill switch, where disabling SSO deletes the users it created, is worse than having none.

*How we will verify it:* Enable for one tenant in staging, provision users, then throw the kill switch. Confirm users, workspaces, memberships, and roles all survive, and confirm the documented behaviour of sessions already in flight.

### Identity model and account linking

Who owns the canonical user record, and the rules that decide when two identities are the same person.

#### IDM-01 · MUST

A user who signs in resolves to an identity native to your own user space, not to a vendor-owned user object you are required to adopt as your own.

*Why this is on the list:* This is the deepest lock-in vector in the category, and it does not look like lock-in on day one. If the vendor's user object is your user object, your data model is rented and your migration cost grows with every feature you ship.

*How we will verify it:* Confirm you can hold your own user row, keyed by your own identifier, with the vendor's subject stored as one more foreign key on it. If the integration guide tells you to key application tables on the vendor's ID, that is the finding.

#### IDM-02 · MUST

Your own generated identifier remains the canonical user ID. Nothing in the flow requires your user ID to equal the vendor's subject.

*Why this is on the list:* Identifiers propagate. Once a vendor subject is in your URLs, your API responses, your data warehouse, and your customers' integrations, it is no longer a vendor identifier, it is your public contract.

*How we will verify it:* Create a user carrying your own identifier and confirm every relevant API accepts a lookup by it, or by an external-ID mapping you control.

#### IDM-03 · MUST

The platform reports, per connection, whether the asserted email is verified and whether domain ownership has been established.

*Why this is on the list:* Automatically linking an unverified asserted email to an existing account is an account-takeover primitive. You cannot make a safe linking decision without knowing which of the two facts the platform is actually asserting.

*How we will verify it:* Ask for the exact field names and their semantics, then configure a connection that asserts an unverified address and confirm the flag changes.

#### IDM-04 · SHOULD

Account-linking rules are deterministic, documented, and never silently merge two accounts on an email match alone.

*Why this is on the list:* Silent merges are unrecoverable. Two humans become one record, and the audit trail that would let you unpick it is the thing you just merged.

*How we will verify it:* Sign in through a second connection with an address that already exists locally. Confirm the outcome is the documented one, and that a merge, if it happens at all, is an explicit action you triggered.

### Organization modelling and provisioning

Tenancy, membership, and what happens the first time an unknown company signs in.

#### ORG-01 · MUST

The platform models organizations and memberships as first-class objects, with a user able to belong to zero, one, or many organizations.

*Why this is on the list:* One membership per user is the assumption that is cheapest to adopt and most expensive to remove. Contractors, agencies, and acquisitions all produce a legitimate two-organization human.

*How we will verify it:* Put one identity into two organizations. Confirm both memberships exist with independent roles, and that the platform can tell you which one a given session is acting in.

#### ORG-02 · SHOULD

Just-in-time provisioning is supported: the first SSO login from an unknown organization creates a workspace and seeds that first user as its owner.

*Why this is on the list:* Without it, every new enterprise connection needs an operator to pre-create the workspace, which puts your team on the critical path of your customer's rollout.

*How we will verify it:* Sign in from a fresh domain. Inspect the resulting organization, membership, and role assignment, and confirm the first user is an owner rather than a member with no administrative path.

#### ORG-03 · SHOULD

An operator can attach an organization to an existing contracted workspace, after which that organization's users resolve into it.

*Why this is on the list:* The customer you already signed has a workspace, users, and data. Their first SSO login must land there rather than somewhere new.

*How we will verify it:* Attach a connection to a pre-existing workspace that already has content, then sign in. Confirm the user lands in the existing workspace with the existing data intact.

#### ORG-04 · SHOULD

Domain gating is supported, so designated contracted domains are excluded from just-in-time creation and attach to the right workspace instead.

*Why this is on the list:* This is the control that stops your largest customer from silently acquiring a second, empty, shadow workspace on the day they turn on SSO. Support finds out when the customer asks where their data went.

*How we will verify it:* Add a domain to the gated list, then attempt a JIT login from it. Confirm the attach path runs and no new workspace is created.

### Customer self-service onboarding

Whether your customer's IT admin can configure and debug their own connection without opening a ticket with you.

#### ONB-01 · SHOULD

New enterprise connections can be configured by the customer through a hosted admin portal you link them to, for both SSO and directory sync.

*Why this is on the list:* Connection setup is the single largest source of implementation support load in B2B identity, and it is work only the customer's IT admin can do.

*How we will verify it:* Generate a portal link as an operator, then complete a full connection as the customer with no involvement from your team. Time it.

#### ONB-02 · SHOULD

Customers can diagnose their own SSO login failures without contacting you.

*Why this is on the list:* Otherwise every misconfigured attribute mapping in your customer base becomes a ticket in your queue, escalated to a vendor you are relaying for.

*How we will verify it:* Deliberately misconfigure an attribute mapping and a certificate, then read the error as the customer admin sees it. An opaque failure code is the finding.

#### ONB-03 · SHOULD

Certificate expiry is notified ahead of time, and rotation is self-serve.

*Why this is on the list:* A SAML signing certificate expires on a date nobody has in a calendar, and the first symptom is an enterprise customer unable to log in on a Monday morning.

*How we will verify it:* Establish the notification lead time, the channel, and who receives it. 'It is visible in the dashboard' means nobody receives it.

### Directory sync and deprovisioning

The lifecycle half of enterprise identity, and the half that fails silently.

#### SCIM-01 · MUST

The SCIM 2.0 endpoint is hosted and maintained by the vendor, with lifecycle events consumed by you over an API or webhooks.

*Why this is on the list:* SCIM conformance is a long tail of per-IdP quirks. Hosting the endpoint yourself means owning that tail forever.

*How we will verify it:* Confirm the endpoint is theirs, and that the events reaching you are normalized rather than raw per-IdP payloads you have to reconcile.

#### SCIM-02 · MUST

Deprovisioning arrives as an event you act on, not as a deletion the vendor performs on your user record.

*Why this is on the list:* Your user row has foreign keys, content ownership, and audit history hanging off it. A forced delete originating outside your system is a data-integrity incident, not a lifecycle feature.

*How we will verify it:* Deprovision a user who owns content. Confirm you received an event and that nothing was removed on your side until you acted on it.

#### SCIM-03 · MUST

The soft signal (user updated, active set to false) and the hard signal (user deleted) are surfaced as distinct events.

*Why this is on the list:* They mean different things. One is an offboarding you should reflect by suspending access and keeping the record; the other is a deletion request. Collapsing them forces you to guess.

*How we will verify it:* Trigger each separately from the IdP and confirm two distinguishable events arrive, with the distinction visible in the payload rather than inferred.

#### SCIM-04 · SHOULD

Directory group membership changes map to application roles.

*Why this is on the list:* Group-driven roles are what makes access management self-service for the customer. Without it, IT provisions the user and then emails you about their permissions.

*How we will verify it:* Add to a group, remove from a group, and rename a group. Removal and rename are handled less reliably than addition in most implementations, and rename breaks anything keyed on display name.

#### SCIM-05 · SHOULD

End-to-end deprovisioning latency is documented, split into the portion the vendor owns and the portion determined by the IdP's own push behaviour.

*Why this is on the list:* This number goes into your security questionnaire answers and your customer contracts. Half of it is not yours to control, and you need to know which half before you commit to it in writing.

*How we will verify it:* Ask for the split explicitly. Then measure it yourself against both IdPs, because the documented figure is rarely the one you will observe.

#### SCIM-06 · MUST

SCIM operations are idempotent and replay-safe.

*Why this is on the list:* Retries happen. A non-idempotent provisioning pipeline turns a transient network failure into duplicate users or a double role grant.

*How we will verify it:* Replay an identical operation several times. Confirm exactly one state change, no duplicate records, and no additional outbound events.

#### SCIM-07 · MUST

Every SCIM request is authenticated against a per-connection bearer token, failing closed before any mutation, with tokens rotatable without downtime.

*Why this is on the list:* A shared token across connections means one customer's leaked credential is every customer's exposure. Failing open on an auth error means an unauthenticated request can mutate your directory.

*How we will verify it:* Send a request with a revoked token and confirm it fails before any state change. Then rotate a live token and confirm provisioning continues.

#### SCIM-08 · SHOULD

Deprovisioning the last owner of a workspace is visible to you, so you can refuse it or require a replacement owner.

*Why this is on the list:* An IdP offboarding an administrator will happily orphan a paying workspace, and nobody notices until someone needs to change a billing detail nobody can reach.

*How we will verify it:* Deprovision the sole owner of a test workspace. Confirm you can detect the condition before applying it, rather than discovering it afterwards.

#### SCIM-09 · MUST

Both common PATCH request shapes for user deactivation are handled, as sent by Microsoft Entra and by Okta.

*Why this is on the list:* RFC 7644 permits both a pathed and an unpathed replace operation. A platform that handles one and rejects the other works for half your enterprise customers and fails for the rest.

*How we will verify it:* Send both shapes. Each must deactivate the user rather than return a 400, and each must produce the same local state.

### Sessions

Session ownership, lifetime, revocation, and logout across two systems that both think they own the browser.

#### SESS-01 · MUST

Nothing in the flow requires you to adopt a second browser cookie, or to make the vendor's session your browser session.

*Why this is on the list:* Two session authorities in one browser means two expiry policies, two logout paths, and a class of bug where a user is signed out of one and not the other.

*How we will verify it:* Complete a login and inspect the cookie jar. Confirm your own session cookie remains authoritative and that the vendor's is either absent or not load-bearing.

#### SESS-02 · SHOULD

Session lifetime is configurable, forced re-authentication is supported, and IdP-driven single logout works.

*Why this is on the list:* Enterprise security teams ask for all three by name, and single logout in particular is frequently claimed and rarely tested.

*How we will verify it:* Trigger a logout from the IdP side and confirm the application session actually ends, rather than surviving until its own expiry.

#### SESS-03 · SHOULD

Revocation-to-effect latency is measurable and documented, per user, per device, and per tenant.

*Why this is on the list:* A revocation you cannot time is a revocation you cannot put in an incident-response runbook. Cached access tokens frequently remain valid well past the revocation call.

*How we will verify it:* Revoke an active session and measure, on a real client, how long until requests actually fail.

### Audit and observability

What the platform records, what it will hand you, and what it will tell you when something stops working.

#### AUDIT-01 · MUST

An event stream, by pull API or webhook, covers SSO connection lifecycle and directory sync events, and can be forwarded into your own audit store.

*Why this is on the list:* Identity events are evidence. Evidence that lives only in a vendor console, under that vendor's retention policy, is evidence you will not have when you need it.

*How we will verify it:* Subscribe, trigger a connection change and a sync, and confirm both arrive with enough detail to reconstruct what happened.

#### AUDIT-02 · MUST

SSO and directory sync failures are observable and alertable to your operators, including the case where a connection simply stops producing events.

*Why this is on the list:* Provisioning breaks silently. An expired token or a changed mapping produces no failing request, so there is nothing to alert on unless absence itself is the signal.

*How we will verify it:* Revoke a working sync token without telling anyone, wait 48 hours, and record what arrived. Usually nothing does, and that tells you which alarm you have to build.

#### AUDIT-03 · SHOULD

Customer-facing audit export is available, with a stated retention window in days on the tier you are actually buying.

*Why this is on the list:* Retention is a pricing lever rather than a security decision, and the tier with a usable window is rarely the tier in the quote.

*How we will verify it:* Get the number in days for your specific tier, in writing, alongside whether streaming is available on it.

#### AUDIT-04 · SHOULD

The vendor states clearly whether the audit log is automatically populated by the platform or emitted by your application.

*Why this is on the list:* An audit log you have to populate yourself is a storage product. Both models are defensible, and discovering which one you bought after the compliance review has started is not.

*How we will verify it:* Ask directly, then check an event you did not emit. If nothing is there, you have your answer.

### Privacy and data lifecycle

Erasure, export, residency, and the fan-out problem when one human has five linked subjects.

#### PRIV-01 · MUST

The platform exposes a provider-agnostic enumeration of every subject linked to one user, so your deletion fan-out is not one provider at a time.

*Why this is on the list:* A single human may be a password identity, two social subjects, and a federated identity. An erasure obligation covers all of them, and an API that only answers per-provider makes completeness impossible to prove.

*How we will verify it:* Link several identities to one user, then call the enumeration and confirm every subject is returned in one response.

#### PRIV-02 · MUST

Vendor-side user deletion is callable from your own workflow and confirms completion, so you can evidence an erasure request.

*Why this is on the list:* Under GDPR the controller has to demonstrate erasure, not merely request it. A deletion with no confirmation is not evidence.

*How we will verify it:* Delete through the API and capture the response. Then confirm the record is genuinely gone rather than flagged, and establish the backup retention window.

#### PRIV-03 · SHOULD

Data residency or region controls for identity data are stated, along with the sub-processor list and its change-notification policy.

*Why this is on the list:* Residency is frequently available for the primary store and not for logs, backups, or support tooling, and the gap is what an auditor finds.

*How we will verify it:* Ask specifically where logs and backups live, not only the primary datastore.

### Security posture

The attestations, the controls behind them, and the limits that apply to you in production.

#### SEC-01 · MUST

A current SOC 2 Type II report and a signable data processing agreement are available.

*Why this is on the list:* Your own enterprise customers will ask for evidence about your sub-processors, and you cannot answer for a vendor that cannot answer for itself.

*How we will verify it:* Read the report rather than the badge. Check the observation period, the exceptions, and whether the identity product is actually in scope.

#### SEC-02 · MUST

Data is encrypted at rest and in transit, with documented key management and a stated password hashing algorithm and work factor.

*Why this is on the list:* 'Encrypted at rest' is universally claimed and describes disk encryption as readily as it describes a considered key hierarchy.

*How we will verify it:* Ask which algorithm hashes passwords, at what cost parameters, and who can access the keys.

#### SEC-03 · MUST

The platform defends against bots, credential stuffing, brute force, and volumetric attack, with controls you can tune per endpoint.

*Why this is on the list:* Registration, login, and recovery have different abuse profiles, and a single global threshold is either too loose for login or too tight for recovery.

*How we will verify it:* Run a credential-stuffing traffic pattern rather than a clean load test, and observe what engages and what it returns.

#### SEC-04 · MUST

API rate limits are documented, including per-tenant dimensions and the process for raising them.

*Why this is on the list:* An undocumented limit is discovered in production, usually during your largest customer's onboarding, when their initial directory sync fires thousands of requests at once.

*How we will verify it:* Get the numbers and the dimensions in writing. Then confirm one large tenant cannot exhaust a limit on behalf of every other tenant.

### Portability and exit

What you can take with you. Ask before signing, because the answer never improves afterwards.

#### EXIT-01 · MUST

Password hashes are exportable, with the algorithm, parameters, and encoding documented, and the entitlement stated in the contract.

*Why this is on the list:* Import tooling is a sales function and export tooling is a retention risk, so the two are rarely built to the same standard. Without hash export, leaving means a forced password reset for your entire user base.

*How we will verify it:* Request an export during evaluation and import one hash into a sandbox elsewhere. Confirm the contract clause covers credentials and not only 'customer data'.

#### EXIT-02 · SHOULD

Users, organizations, memberships, roles, and connection configuration are all exportable as data.

*Why this is on the list:* A profile-only export leaves the structure behind, and the structure is the part you spent two years building.

*How we will verify it:* Export everything during the POC and check what is missing. Configuration is usually the gap.

### Commercial and support

Cost behaviour at the scale you expect, and who is in the room during implementation.

#### COMM-01 · SHOULD

Pricing is modelled against your own three-year projection, including which of the requirements above sit behind a higher tier.

*Why this is on the list:* Cost failures in this category are almost never the unit price. They are a feature gate discovered in year two, when the enterprise customer who needs it is already signed.

*How we will verify it:* Take your MAU curve, enterprise-tenant count, and this requirement list to each vendor, and ask which lines change the tier.

#### COMM-02 · SHOULD

Solutions engineering works alongside your engineers during implementation, through a shared channel.

*Why this is on the list:* The first federated customer surfaces every ambiguity in the integration at once, and usually on the customer's timeline rather than yours.

*How we will verify it:* Confirm it is contractual rather than a POC courtesy, and establish what happens to the channel after go-live.

#### COMM-03 · SHOULD

The vendor gives a realistic estimate of time to first enterprise customer live and engineer-days required on your side, against this requirement list.

*Why this is on the list:* An estimate given against a feature list is always weeks. An estimate given against acceptance tests is the honest number, and the difference between the two is the most useful thing you will learn during evaluation.

*How we will verify it:* Ask for it in writing with the requirement IDs referenced, then compare it against what the POC actually took.

## 4. Non-functional requirements

### Compliance and certifications

The platform must demonstrate the following certifications or attestations:

- [ ] SOC 2 Type II attestation / certification
- [ ] GDPR attestation / certification

Please attach the most recent attestation reports under NDA.

### Security

- Encryption at rest and in transit (specify algorithms and key management).
- Logging, monitoring, and incident response posture.
- Vulnerability disclosure program.
- Penetration test cadence and access to redacted reports.

### Reliability

- Documented SLA for authentication endpoints (target: 99.99% monthly).
- Multi-region failover architecture.
- Recent incident history (12 months) with public post-mortems if any.

### Data handling

- Data residency guarantees for our region (US + EU).
- Sub-processor list and change-notification policy.
- GDPR/CCPA data export and deletion endpoints.

## 5. Integration and developer experience

- SDK availability for our application stack.
- Authentication API documentation and reference architecture.
- Migration tooling from our current identity store.
- Sandbox / preview environment for evaluation.

## 6. Commercial terms

Please provide:
- **Pricing model** at our current MAU and at 12-month projected MAU.
- **Effective per-MAU rate** at each band, including any feature upcharges.
- **Multi-year commitment discounts** if applicable.
- **Free trial or POC structure** for evaluation.
- **Contract terms** including data ownership, termination, and exit assistance.

## 7. Timeline

- **Pilot deployment:** 6 weeks from contract
- **Full production cutover:** 12 weeks from contract

## 8. Evaluation criteria

Vendors will be evaluated on:

1. Capability coverage of the functional requirements (35%).
2. Total cost of ownership over 3 years (25%).
3. Compliance and security posture (15%).
4. Integration / migration effort (15%).
5. Reference customer feedback at our MAU band and segment (10%).

## 9. Submission instructions

Please submit your response in PDF format to [Contact email] no later than [Date]. Include:

- Completed responses to sections 3 and 4 with capability evidence.
- Pricing detail per section 6.
- Two reference customer contacts at our MAU band and segment.
- Sample contract for review.

We will respond within 10 business days of submission with shortlist results and interview invitations.

---

*Generated with the CIAM Compass RFP builder, https://guptadeepak.com/ciam-compass/tools/rfp-builder/*