SSO Configuration
Microsoft Entra ID (Azure AD) Single Sign-On setup for Chatty AI.
Overview
Chatty AI supports Microsoft SSO, allowing users to log in with their Microsoft/Office 365 accounts. This provides:
- Single Sign-On experience
- No password management
- Integration with Microsoft identity
- Multi-factor authentication (if enabled in Azure)
SSO Variables
MICROSOFT_CLIENT_ID
- Type: String (UUID)
- Required: No (only if using SSO)
- Default: None
- Example:
12345678-1234-1234-1234-123456789012 - Description: Microsoft Entra ID (Azure AD) Application (client) ID for SSO login
- Used in:
chattyaiservice - Setup: Azure Portal → App Registrations
MICROSOFT_CLIENT_SECRET
- Type: String (secret)
- Required: No (only if using SSO)
- Default: None
- Security: 🔴 HIGH - Keep secret
- Example:
abc123~XYZ... - Description: Microsoft Entra ID client secret for SSO authentication
- Used in:
chattyaiservice - Setup: Azure Portal → Certificates & secrets
MICROSOFT_CLIENT_TENANT_ID
- Type: String (UUID or "common")
- Required: No (only if using SSO)
- Default: None
- Example:
common- Multi-tenant (any Microsoft account)12345678-1234-1234-1234-123456789012- Single tenant
- Description: Microsoft Entra ID tenant ID
- Used in:
chattyaiservice
MICROSOFT_OAUTH_SCOPE
- Type: String (space-separated scopes)
- Required: No
- Default:
openid email profile - Example:
openid email profile User.Read - Description: OAuth scopes to request during Microsoft SSO login
- Used in:
chattyaiservice
MICROSOFT_REDIRECT_URI
- Type: String (URL)
- Required: No (auto-generated)
- Default:
${CHATTYAI_URL}/oauth/microsoft/callback - Example:
https://chat.example.com/oauth/microsoft/callback - Description: OAuth redirect URI for Microsoft SSO (must match Azure App Registration)
- Used in:
chattyaiservice - Note: Set this manually in .env to match your Azure configuration
Azure App Registration Setup
Step 1: Create App Registration
- Go to Azure Portal
- Navigate to Azure Active Directory → App registrations
- Click New registration
- Configure:
- Name:
Chatty AI - Supported account types:
- Single tenant: Accounts in this organizational directory only
- Multi-tenant: Accounts in any organizational directory
- Redirect URI:
- Platform:
Web - URI:
https://chat.example.com/oauth/microsoft/callback
- Platform:
- Name:
- Click Register
Step 2: Get Client ID and Tenant ID
After registration:
- Copy Application (client) ID → This is
MICROSOFT_CLIENT_ID - Copy Directory (tenant) ID → This is
MICROSOFT_CLIENT_TENANT_ID
Step 3: Create Client Secret
- Go to Certificates & secrets
- Click New client secret
- Configure:
- Description:
Chatty AI Secret - Expires: 24 months (recommended)
- Description:
- Click Add
- Copy the secret value immediately → This is
MICROSOFT_CLIENT_SECRET- ⚠️ You can't view it again after leaving the page!
Step 4: Configure API Permissions
- Go to API permissions
- Click Add a permission
- Select Microsoft Graph
- Select Delegated permissions
- Add these permissions:
openid- Sign inemail- Read email addressprofile- Read basic profileUser.Read- Read user profile (optional)
- Click Add permissions
- Click Grant admin consent (if you have admin rights)
Step 5: Configure Authentication
- Go to Authentication
- Under Platform configurations → Web:
- Redirect URIs:
https://chat.example.com/oauth/microsoft/callback - Front-channel logout URL: (leave empty)
- Implicit grant and hybrid flows:
- ✅ ID tokens (used for implicit and hybrid flows)
- Redirect URIs:
- Under Advanced settings:
- Allow public client flows: No
- Click Save
Configuration Examples
Single Tenant (One Organization)
MICROSOFT_CLIENT_ID=12345678-1234-1234-1234-123456789012
MICROSOFT_CLIENT_SECRET=abc123~XYZ...
MICROSOFT_CLIENT_TENANT_ID=87654321-4321-4321-4321-210987654321
MICROSOFT_OAUTH_SCOPE=openid email profile
MICROSOFT_REDIRECT_URI=https://chat.example.com/oauth/microsoft/callback
Multi-Tenant (Any Microsoft Account)
MICROSOFT_CLIENT_ID=12345678-1234-1234-1234-123456789012
MICROSOFT_CLIENT_SECRET=abc123~XYZ...
MICROSOFT_CLIENT_TENANT_ID=common
MICROSOFT_OAUTH_SCOPE=openid email profile
MICROSOFT_REDIRECT_URI=https://chat.example.com/oauth/microsoft/callback
With Additional Scopes
MICROSOFT_CLIENT_ID=12345678-1234-1234-1234-123456789012
MICROSOFT_CLIENT_SECRET=abc123~XYZ...
MICROSOFT_CLIENT_TENANT_ID=common
MICROSOFT_OAUTH_SCOPE=openid email profile User.Read
MICROSOFT_REDIRECT_URI=https://chat.example.com/oauth/microsoft/callback
Chatty AI Configuration
Add to .env File
# Microsoft SSO Configuration
MICROSOFT_CLIENT_ID=12345678-1234-1234-1234-123456789012
MICROSOFT_CLIENT_SECRET=abc123~XYZ...
MICROSOFT_CLIENT_TENANT_ID=common
MICROSOFT_REDIRECT_URI=https://chat.example.com/oauth/microsoft/callback
Restart Services
docker compose down
docker compose up -d
Test SSO Login
- Go to Chatty AI login page
- Click Sign in with Microsoft
- Authenticate with Microsoft account
- Grant permissions if prompted
- You should be logged into Chatty AI
Security Best Practices
1. Protect Client Secret
# Never commit to git
echo "MICROSOFT_CLIENT_SECRET=*" >> .gitignore
# Rotate secret every 12-24 months
# Azure Portal → App Registration → Certificates & secrets → New client secret
2. Use Single Tenant for Production
# More secure - only your organization
MICROSOFT_CLIENT_TENANT_ID=87654321-4321-4321-4321-210987654321
# Less secure - any Microsoft account
MICROSOFT_CLIENT_TENANT_ID=common
3. Minimal Scopes
Only request scopes you need:
# Minimal (recommended)
MICROSOFT_OAUTH_SCOPE=openid email profile
# With user info
MICROSOFT_OAUTH_SCOPE=openid email profile User.Read
4. HTTPS Required
SSO only works with HTTPS:
# Required
CHATTYAI_URL=https://chat.example.com
# Won't work
CHATTYAI_URL=http://chat.example.com
5. Correct Redirect URI
Must match exactly in Azure and .env:
# In Azure App Registration
https://chat.example.com/oauth/microsoft/callback
# In .env
MICROSOFT_REDIRECT_URI=https://chat.example.com/oauth/microsoft/callback
Troubleshooting
Redirect URI Mismatch
Error: AADSTS50011: The redirect URI specified in the request does not match
Solution:
- Check
MICROSOFT_REDIRECT_URIin .env matches Azure - Verify
CHATTYAI_URLis correct - Ensure using HTTPS
# Check current config
grep MICROSOFT_REDIRECT_URI .env
grep CHATTYAI_URL .env
# Should match Azure App Registration redirect URI exactly
Invalid Client Secret
Error: AADSTS7000215: Invalid client secret provided
Solution:
- Client secret may have expired
- Create new secret in Azure Portal
- Update
MICROSOFT_CLIENT_SECRETin .env - Restart services
Tenant Not Found
Error: AADSTS90002: Tenant not found
Solution:
- Check
MICROSOFT_CLIENT_TENANT_IDis correct - Use
commonfor multi-tenant - Use specific tenant ID for single-tenant
Permissions Not Granted
Error: AADSTS65001: The user or administrator has not consented
Solution:
- Go to Azure Portal → App Registration → API permissions
- Click Grant admin consent
- Or have users consent during first login
SSO Button Not Showing
Check Chatty AI logs:
docker compose logs chattyai | grep -i microsoft
Verify variables are set:
docker compose exec chattyai env | grep MICROSOFT
SSO + Local Users
Chatty AI supports both SSO and local users:
- SSO users: Authenticate via Microsoft
- Local users: Authenticate via database (admin, etc.)
- Admin account: Always local (not SSO)
Admin Account
Admin account is always local:
CHATTYAI_ADMIN_EMAIL=admin@company.com
CHATTYAI_ADMIN_PASSWORD=admin-password
This ensures you can always log in even if SSO is misconfigured.
SSO vs LDAP
| Feature | Microsoft SSO | LDAP |
|---|---|---|
| Setup | Azure App Registration | LDAP server required |
| User Source | Microsoft/Office 365 | Corporate LDAP/AD |
| MFA Support | Yes (via Azure) | Depends on LDAP |
| Password Management | Microsoft handles | LDAP handles |
| Best For | Office 365 users | On-premise AD users |
You can enable both SSO and LDAP simultaneously.
Advanced Configuration
Custom Scopes
Request additional Microsoft Graph permissions:
MICROSOFT_OAUTH_SCOPE=openid email profile User.Read Calendars.Read Mail.Read
Remember to add these permissions in Azure App Registration.
Multi-Tenant Configuration
Allow users from any organization:
MICROSOFT_CLIENT_TENANT_ID=common
Or specific organizations:
MICROSOFT_CLIENT_TENANT_ID=organizations
Or consumers only:
MICROSOFT_CLIENT_TENANT_ID=consumers
Related Documentation
- LDAP Configuration - LDAP authentication alternative
- Core Application Variables - Admin account setup
- Service Management - Managing services