Enterprise single sign-on (SSO) authentication using the SAML 2.0 protocol. Supports major identity providers including Okta, OneLogin, Azure AD, Google Workspace, JumpCloud, and Auth0.
- Standards Compliance: Full SAML 2.0 protocol support
- Major IdP Support: Pre-configured for Okta, OneLogin, Azure AD, Google, JumpCloud, Auth0
- Service Provider Metadata: Auto-generated SP metadata for easy IdP configuration
- Assertion Consumer Service (ACS): Handles SAML assertions from IdP
- Single Logout (SLO): Support for single logout across applications
- IdP-Initiated Login: Optional support for IdP-initiated SSO flows
- Request Signing: Sign SAML requests for enhanced security
- Attribute Mapping: Flexible mapping of SAML attributes to user fields
- Auto-Provisioning: Automatically create user accounts on first login
- Force Re-authentication: Optional force re-auth even with active IdP session
Admin → Plugins → "SAML 2.0 Authentication" → Install
{
"enabled": true,
"provider": "okta",
"entityID": "https://streamspace.example.com",
"metadataURL": "https://your-idp.okta.com/app/metadata.xml",
"allowIDPInitiated": true,
"signRequest": true,
"forceAuthn": false
}Generate a self-signed certificate for your Service Provider:
openssl req -x509 -newkey rsa:2048 -keyout sp-key.pem -out sp-cert.pem -days 365 -nodesThen configure in the plugin:
{
"certificate": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----",
"privateKey": "-----BEGIN PRIVATE KEY-----\nMIIE...\n-----END PRIVATE KEY-----"
}Map SAML attributes from your IdP to StreamSpace user fields:
{
"attributeMapping": {
"email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
"username": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name",
"firstName": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
"lastName": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname",
"groups": "http://schemas.xmlsoap.org/claims/Group"
}
}{
"autoProvisionUsers": true,
"defaultRole": "user"
}-
Create SAML App in Okta Admin Console
- Applications → Create App Integration → SAML 2.0
-
Configure General Settings:
- App name: StreamSpace
- App logo: (optional)
-
Configure SAML Settings:
- Single sign-on URL:
https://streamspace.example.com/saml/acs - Audience URI (SP Entity ID):
https://streamspace.example.com - Name ID format: EmailAddress
- Application username: Email
- Single sign-on URL:
-
Attribute Statements:
- email:
user.email - username:
user.login - firstName:
user.firstName - lastName:
user.lastName
- email:
-
Download Metadata:
- Identity Provider metadata → Download XML
- Paste XML into plugin's
metadataXMLfield
-
Create Enterprise Application:
- Azure Portal → Azure Active Directory → Enterprise Applications
- New application → Create your own application
- Name: StreamSpace, choose "Integrate any other application"
-
Configure Single Sign-On:
- Single sign-on → SAML
- Basic SAML Configuration:
- Identifier (Entity ID):
https://streamspace.example.com - Reply URL (ACS):
https://streamspace.example.com/saml/acs - Sign on URL:
https://streamspace.example.com/saml/login
- Identifier (Entity ID):
-
User Attributes & Claims:
- Unique User Identifier:
user.mail - Additional claims:
- email:
user.mail - firstName:
user.givenname - lastName:
user.surname
- email:
- Unique User Identifier:
-
Download Metadata:
- SAML Signing Certificate → Federation Metadata XML
- Paste into plugin's
metadataXMLfield
-
Add Custom SAML App:
- Admin Console → Apps → Web and mobile apps → Add app → Add custom SAML app
-
App Details:
- App name: StreamSpace
- App icon: (optional)
- Continue
-
Google Identity Provider Details:
- Download Metadata
- Paste into plugin's
metadataXMLfield
-
Service Provider Details:
- ACS URL:
https://streamspace.example.com/saml/acs - Entity ID:
https://streamspace.example.com - Start URL:
https://streamspace.example.com/saml/login - Name ID format: EMAIL
- Name ID: Basic Information > Primary email
- ACS URL:
-
Attribute Mapping:
- email: Basic Information > Primary email
- firstName: Basic Information > First name
- lastName: Basic Information > Last name
-
Add SAML Test Connector:
- Applications → Add App → Search "SAML Test Connector (Advanced)"
-
Configuration:
- Audience (EntityID):
https://streamspace.example.com - Recipient:
https://streamspace.example.com/saml/acs - ACS (Consumer) URL Validator:
https://streamspace.example.com/saml/acs - ACS (Consumer) URL:
https://streamspace.example.com/saml/acs
- Audience (EntityID):
-
Parameters (map to SAML attributes):
- email → Email
- firstName → First Name
- lastName → Last Name
-
Download Metadata:
- SSO → Issuer URL → Download as XML
- Paste into plugin's
metadataXMLfield
The plugin registers the following SAML endpoints:
GET /saml/metadata- Service Provider metadata (share with IdP)POST /saml/acs- Assertion Consumer Service (callback from IdP)GET /saml/slo- Single Logout ServicePOST /saml/slo- Single Logout POST bindingGET /saml/login- Initiate SAML login flowGET /saml/logout- Logout and clear session
- User clicks "Sign in with SSO" button
- Redirected to
/saml/login - Plugin generates SAML request and redirects to IdP
- User authenticates at IdP
- IdP sends SAML assertion to
/saml/acs - Plugin validates assertion and extracts user info
- User provisioned (if new) and logged in
- Redirected to application
- User logs into IdP portal
- User clicks StreamSpace app icon
- IdP sends SAML assertion to
/saml/acs - Plugin validates assertion and extracts user info
- User provisioned (if new) and logged in
- Redirected to application
- Certificate-Based Encryption: X.509 certificates for signing
- Request Signing: Sign SAML requests sent to IdP
- Response Validation: Verify SAML response signatures
- Assertion Validation: Check NotBefore, NotOnOrAfter, Audience
- Replay Protection: Validate assertion ID uniqueness
- TLS Required: All SAML endpoints require HTTPS in production
"Failed to verify assertion signature"
- Ensure IdP certificate is current (not expired)
- Check that metadata XML matches IdP configuration
- Verify clock synchronization between SP and IdP
"Username not found in SAML assertion"
- Check attribute mapping configuration
- Verify IdP is sending expected attributes
- Review SAML response XML in network logs
"Metadata validation failed"
- Ensure metadata XML is complete and valid
- Try using metadata URL instead of pasting XML
- Check for line breaks or formatting issues in pasted XML
Enable debug logging to see full SAML request/response flow:
# View plugin logs
kubectl logs -n streamspace -l plugin=streamspace-auth-saml- SAML 2.0: Compliant with OASIS SAML 2.0 specification
- Security: Follows SAML security best practices
- Privacy: No user data stored beyond session duration
MIT