Entra ID SAML SSO
Configure Microsoft Entra ID SAML Single Sign-On via BoilStream's built-in Superadmin Dashboard at https://your-domain/auth.
Prerequisites
- Microsoft Entra ID tenant
- Global Administrator or Application Administrator role
- BoilStream with HTTPS enabled
- Superadmin access to BoilStream
Step 1: Create Enterprise Application
- Azure Portal → Entra ID → Enterprise applications
- New application → Create your own application
- Name:
BoilStream Authentication - Type: Non-gallery application
- Click Create
Step 2: Configure SAML
Basic SAML Configuration
| Field | Value |
|---|---|
| Identifier (Entity ID) | https://your-domain.com/auth/saml/metadata |
| Reply URL | https://your-domain.com/auth/saml/acs |
| Sign on URL | https://your-domain.com/auth |
| Logout URL | https://your-domain.com/auth/saml/logout |
Attributes & Claims
Configure these claims:
| Claim | Source Attribute |
|---|---|
| Name ID | user.mail |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress | user.mail |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name | user.userprincipalname |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname | user.givenname |
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname | user.surname |
http://schemas.microsoft.com/ws/2008/06/identity/claims/groups | user.groups |
Add group claim:
- Add a group claim → Security groups
- Source: Group ID (recommended)
Download Metadata
SAML Signing Certificate section → Download Federation Metadata XML
Step 3: Assign Users
- Enterprise Application → Users and groups
- Add user/group → Select users/groups
- Click Assign
For RBAC, create security groups:
BoilStream Admins- Full accessBoilStream Data Engineers- Write accessBoilStream Analysts- Read-only
Note Group Object IDs from Entra ID → Groups for authorization config.
Step 4: Configure BoilStream
Via Superadmin GUI
- Login as superadmin at
https://your-domain.com/auth(username:boilstream) - Navigate to SAML Providers
- Click Add SAML Provider
- Fill provider details:
- Name:
Entra ID - SP Entity ID:
https://your-domain.com/auth/saml/metadata - ACS URL:
https://your-domain.com/auth/saml/acs - SLO URL:
https://your-domain.com/auth/saml/logout(optional)
- Name:
- Upload IdP Metadata → Select downloaded XML file
- Verify attribute mappings (pre-filled with Microsoft defaults)
- Toggle Enabled → Save
Single Provider
BoilStream supports one SAML provider at a time. Delete existing provider before adding a new one.
Authorization (config.yaml)
auth:
authorization_enabled: true
admin_groups:
- "12345678-1234-1234-1234-123456789abc" # Group Object ID
write_groups:
- "23456789-2345-2345-2345-234567890bcd"
read_only_groups:
- "34567890-3456-3456-3456-345678901cde"Step 5: Test
- Logout from superadmin
- Navigate to
https://your-domain.com/auth - Click Sign in with Entra ID
- Authenticate with Microsoft credentials
- Dashboard displays PostgreSQL credentials and JWT token
Using Credentials
PostgreSQL:
psql -h your-domain.com -p 5432 -U john.doe@company.com -d boilstreamHTTP Ingestion (JWT):
fetch('https://your-domain.com/ingest/events', {
method: 'POST',
headers: {
'Authorization': `Bearer ${JWT_TOKEN}`, // From dashboard
'Content-Type': 'application/vnd.apache.arrow.stream'
},
body: arrowData
});Troubleshooting
SAML button not showing: Check provider is Enabled in superadmin GUI, restart BoilStream
"SAML Response validation failed": Re-download/upload Federation Metadata XML from Azure Portal
"User not authorized": Verify user is in assigned groups, check admin_groups in config match Group Object IDs
"Redirect URI mismatch": Verify Reply URL in Azure Portal exactly matches ACS URL
Groups not in SAML response: Verify group claim configured in Attributes & Claims, check user is group member
Security Best Practices
- Monitor certificate expiration in Azure Portal (auto-rotates)
- Use Group Object IDs (stable) vs names (breaks on rename)
- Enable MFA in Entra ID for admin accounts
- Use short session TTLs (default: 8 hours)
- Enable Conditional Access policies
Managing SAML Config
Update: Superadmin GUI → SAML Providers → Click provider → Edit → Save
Delete: SAML Providers → Click provider → Delete → Confirm
Changes apply immediately without restart.
Next Steps
- GitHub OAuth - Configure GitHub authentication
- Google OAuth - Configure Google authentication
- Complete Web Auth Guide