SAML 2.0
Sign members into Kigo through your SAML 2.0 Identity Provider.
Introduction
Kigo's SAML 2.0 integration lets members sign in to a Kigo-powered experience through your organization's Identity Provider (IdP). Your IdP authenticates the member and sends Kigo a signed SAML assertion. Kigo validates the assertion, creates or updates the member's account, creates a single-use SSO session, and redirects the member into the Kigo experience, signed in.
Kigo acts as the SAML Service Provider (SP). Your IdP (for example Okta, Microsoft Entra ID, Ping, ADFS, or Auth0) acts as the Identity Provider. No code is required on your side, only IdP configuration.
Authentication Flow
Kigo supports both SP-initiated and IdP-initiated sign-in.
SP-initiated (the member starts from a link on your site that goes through Kigo):
sequenceDiagram
actor Member
participant App as Your Site
participant Kigo as Kigo API (SP)
participant IdP as Your IdP
participant Exp as Kigo-hosted Experience
Member->>App: Clicks link to Kigo experience
App->>Kigo: GET /api/v1/sso/saml/login?entity_id={your IdP entity ID}
Kigo-->>App: { "login_url": "<IdP SSO URL with AuthnRequest>" }
App->>IdP: Redirect member to login_url
IdP->>Member: Login prompt (skipped if already signed in)
Member->>IdP: Authenticates
IdP->>Kigo: POST signed SAMLResponse to the ACS URL
Kigo->>Kigo: Validate signature, read NameID and attributes, create/update account
Kigo->>Exp: Redirect to {redirect_url}?sessionId={session_id}
Exp-->>Member: Member is signed in
IdP-initiated (the member starts from your IdP, portal, or app launcher): the IdP posts a signed assertion directly to Kigo's ACS URL, and the flow continues from the "Validate signature" step above.
What Kigo Provides
| Item | Value |
|---|---|
| SP Entity ID (Audience) | http://kigodigital.net |
| Assertion Consumer Service (ACS) URL | https://api.kigodigital.net/api/v1/sso/saml/acs (HTTP-POST binding) |
| SP Metadata URL | https://api.kigodigital.net/api/v1/sso/saml/metadata |
| SP signing certificate | Included in the SP metadata. |
| SP-initiated login endpoint | GET https://api.kigodigital.net/api/v1/sso/saml/login?entity_id={your IdP entity ID} |
| Program ID (optional) | The Kigo program UUID, if you choose to send the programid attribute (see Step 2). |
The values above are for production. Kigo provides the matching test-environment values during onboarding. Configure and test in the test environment first.
The SP metadata includes an md:SingleLogoutService element. Single Logout (SLO) is not currently supported by Kigo; this value may change or be removed in the future.
What You Provide
| Item | Description |
|---|---|
| IdP metadata XML | Exported from your IdP for the Kigo application. It must include your IdP Entity ID (Issuer), SSO URL (for SP-initiated sign-in), and signing certificate. |
| Program(s) | Which Kigo program(s) members of this IdP application should sign in to. |
| Attribute names | Confirmation that your assertions use the attribute names in Step 2, or the names you use instead. |
| Test accounts | One or more test members in your IdP for the test environment. |
| Technical contact | Someone who can update the IdP configuration during setup and testing. |
Prerequisites
- Your IdP supports SAML 2.0 Web Browser SSO with the HTTP-POST binding to the ACS.
- Your IdP can sign assertions (Kigo's metadata sets
WantAssertionsSigned="true"). Unsigned assertions are rejected. - Your network allows HTTPS traffic to
api.kigodigital.net. - You have administrative access to your IdP.
- You have a Kigo technical contact for setup and testing.
Steps to Implement
Step 1: Create a SAML Application for Kigo in Your IdP
- Create a new SAML 2.0 application (sometimes called a "relying party trust" or "service provider") for Kigo.
- Import the Kigo SP metadata from the metadata URL, or enter the values manually:
- Entity ID / Audience URI:
http://kigodigital.net - ACS URL / Reply URL / Single sign-on URL:
https://api.kigodigital.net/api/v1/sso/saml/acs
- Entity ID / Audience URI:
- Set the assertion to be signed by your IdP. Signing the whole response as well is fine.
- Kigo does not sign its AuthnRequests (
AuthnRequestsSigned="false"). Do not require signed AuthnRequests for this application.
One IdP application per programKigo identifies your integration by the Issuer (Entity ID) in the assertion, and each integration has one redirect into the Kigo experience. If you have more than one Kigo program, create a separate SAML application with its own Entity ID for each program.
Step 2: Configure the NameID and Attributes
NameID (Subject): Required. Kigo uses the NameID as the member's unique identifier (external_user_id) in Kigo. Use a value that never changes for the member, such as an internal member or account ID. If it changes, Kigo treats the member as new.
Attributes: Kigo reads the following attribute names. Attribute names are case-sensitive.
| Attribute | Attribute Name | Required | Description |
|---|---|---|---|
emailaddress | No | The member's email address. Recommended. | |
| First name | firstname | No | The member's first name. |
| Last name | lastname | No | The member's last name. |
| Program ID | programid | No | The Kigo program UUID. If omitted, Kigo uses the program configured for your integration. Most integrations omit it. |
Any additional attributes in the assertion are stored on the member's Kigo account as user attributes. Agree on them with Kigo before sending them.
Example assertion (excerpt):
<saml:Assertion ...>
<saml:Issuer>https://idp.example.com/kigo-program</saml:Issuer>
<ds:Signature>...</ds:Signature>
<saml:Subject>
<saml:NameID>member-12345</saml:NameID>
...
</saml:Subject>
<saml:Conditions ...>
<saml:AudienceRestriction>
<saml:Audience>http://kigodigital.net</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
<saml:AttributeStatement>
<saml:Attribute Name="emailaddress"><saml:AttributeValue>[email protected]</saml:AttributeValue></saml:Attribute>
<saml:Attribute Name="firstname"><saml:AttributeValue>Jane</saml:AttributeValue></saml:Attribute>
<saml:Attribute Name="lastname"><saml:AttributeValue>Doe</saml:AttributeValue></saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>Step 3: Export and Securely Send Your IdP Metadata
- Export the IdP metadata XML for the Kigo application.
- Confirm it contains your Entity ID, SSO URL, and signing certificate.
- Send it to your Kigo technical contact through a secure channel, such as an encrypted email, a secure file transfer (SFTP), or a secure collaboration platform.
IdP metadata contains only public information (no private keys), but sending it securely protects its integrity.
Step 4: Kigo Configuration
Kigo will:
- Import your IdP metadata and link your IdP Entity ID to your program.
- Configure the redirect URL, which is where Kigo sends the member after sign-in. It points to your program's Kigo-hosted experience, for example
{base_url}/sso/{external_program_id}. - Confirm SSO is enabled for the program.
- Send you the values to test with, including the SP-initiated login link.
Step 5: Start Sign-In
Choose one or both:
-
SP-initiated: From your site, call the login endpoint with your IdP Entity ID (URL-encoded), then redirect the member's browser to the returned
login_url.curl "https://api.kigodigital.net/api/v1/sso/saml/login?entity_id=https%3A%2F%2Fidp.example.com%2Fkigo-program"{ "login_url": "https://idp.example.com/sso/saml?SAMLRequest=..." } -
IdP-initiated: Add a tile, link, or button in your IdP or portal that launches the Kigo application. The IdP posts the assertion to Kigo's ACS URL.
After a successful sign-in, Kigo redirects the member to:
{redirect_url}?sessionId={session_id}
The Kigo-hosted experience exchanges the sessionId and signs the member in. No action is needed from your application. The session ID is single-use and expires after 30 minutes.
Step 6: Test the Connection
Complete all testing in Kigo's test environment before production.
| Test | Expected Result |
|---|---|
| SP-initiated sign-in with a valid member | Member is sent to your IdP, then lands signed in to the Kigo experience. |
| IdP-initiated sign-in (if used) | Member lands signed in to the Kigo experience. |
| Sign in a second time as the same member | The same Kigo account is used. |
| Attribute mapping | Email and name (if sent) appear correctly on the member's Kigo account. |
| Member with no email or name attributes | Sign-in succeeds. Optional fields are blank. |
| Unsigned assertion or wrong certificate | Sign-in is rejected. |
Errors
| Status | When |
|---|---|
| 400 | The assertion cannot be decoded, is not signed correctly, has no Issuer, or has no NameID. |
| 403 | SSO is not enabled for the program. |
| 404 | No SAML configuration exists for the entity_id passed to the login endpoint. |
Key Considerations
- Entity ID: The Issuer in every assertion must exactly match the Entity ID in the IdP metadata you sent Kigo.
- Stable NameID: The account is keyed on the NameID. Avoid values that can change, such as email addresses, when a permanent ID is available.
- Multiple programs: Use one SAML application (and Entity ID) per Kigo program.
- Session management: Kigo does not support Single Logout. The Kigo experience keeps its own session after sign-in.
Best Practices
- Certificate renewal: Notify Kigo well before your IdP signing certificate expires (for example, 90 days) and send updated metadata. An expired or replaced certificate stops sign-in until Kigo has the new metadata.
- Testing: Test with several member types, with and without optional attributes, and with error conditions.
- Documentation: Keep a record of your IdP and Kigo configuration settings.
- Monitoring: Alert on authentication failures in your IdP.
- Coordination: Coordinate IdP changes (certificates, Entity ID, attributes) and maintenance windows with your Kigo technical contact.
Updated 21 days ago