Identity Integration
This guide walks you through connecting your identity provider (IdP) to Alien Giraffe. We’ll cover the three most common providers—Okta, Azure AD, and Google Workspace—then show you how to configure user and team synchronization.
Why Integrate an Identity Provider?
Section titled “Why Integrate an Identity Provider?”Instead of creating and managing users manually in Alien Giraffe, integrate with your existing identity provider to:
- Single Sign-On (SSO): Users authenticate with their existing company credentials
- Automatic User Provisioning: New employees get access automatically
- Team Synchronization: Teams and groups stay in sync with your org structure
- Lifecycle Management: Access is revoked automatically when employees leave
- Centralized Management: One place to manage all identities
Before You Begin
Section titled “Before You Begin”Make sure you have:
- Administrator access to your identity provider
- Alien Giraffe installed and running (Installation Guide)
- Your Alien Giraffe public URL (e.g.,
https://a10e.company.com)
Quick Start: Okta
Section titled “Quick Start: Okta”Okta is a popular cloud-based identity provider. Here’s how to integrate it.
Step 1: Create Okta Application
Section titled “Step 1: Create Okta Application”-
Log into your Okta admin console
-
Navigate to Applications → Applications → Create App Integration
-
Select OIDC - OpenID Connect
-
Select Web Application
-
Configure the application:
- App integration name:
Alien Giraffe - Grant type: Authorization Code
- Sign-in redirect URIs:
https://a10e.company.com/auth/callback - Sign-out redirect URIs:
https://a10e.company.com/auth/logout - Assignments: Select who should have access
- App integration name:
-
Click Save and note:
- Client ID:
0oa... - Client Secret: (click to reveal)
- Client ID:
Step 2: Configure Group Claims
Section titled “Step 2: Configure Group Claims”To sync teams from Okta groups:
- In your Okta application, go to Sign On tab
- Scroll to OpenID Connect ID Token
- Click Edit
- Add a Groups claim:
- Claim name:
groups - Value type:
Filter - Filter:
Matches regex: .*(or specify pattern likea10e-.*)
- Claim name:
Step 3: Create Integration in Alien Giraffe
Section titled “Step 3: Create Integration in Alien Giraffe”Create identity/okta.yaml:
apiVersion: v1kind: IdentityProvidermetadata: name: okta namespace: production
spec: type: oidc provider: okta
config: issuer: https://your-domain.okta.com clientId: 0oa... clientSecretRef: okta-client-secret scopes: - openid - profile - email - groups
attributeMapping: - claim: email target: user.email required: true
- claim: given_name target: user.firstName
- claim: family_name target: user.lastName
- claim: groups target: user.teams transform: lowercase
groupSync: enabled: true filter: "a10e-*" # Only sync groups starting with a10e- schedule: "*/15 * * * *" # Every 15 minutesStep 4: Create Client Secret
Section titled “Step 4: Create Client Secret”# Create secret for Okta client credentialscat > okta-secret.yaml <<EOFapiVersion: v1kind: Secretmetadata: name: okta-client-secrettype: credentialsdata: clientId: 0oa... clientSecret: your-client-secret-hereEOF
# Apply the secreta10e secret apply -f okta-secret.yamlStep 5: Apply Configuration
Section titled “Step 5: Apply Configuration”# Apply the identity provider configurationa10e identity-provider apply -f identity/okta.yaml
# Verify it was createda10e identity-provider list
# Test authenticationa10e identity-provider test oktaStep 6: Test Login
Section titled “Step 6: Test Login”# Test SSO login flowa10e auth login --provider okta
# This will:# 1. Open browser to Okta login page# 2. Redirect back after authentication# 3. Create session in Alien Giraffe
# Verify your identitya10e auth whoamiQuick Start: Azure AD (Entra ID)
Section titled “Quick Start: Azure AD (Entra ID)”Microsoft’s Azure Active Directory is common in enterprise environments.
Step 1: Register Application in Azure
Section titled “Step 1: Register Application in Azure”-
Log into Azure Portal
-
Navigate to Azure Active Directory → App registrations → New registration
-
Configure:
- Name:
Alien Giraffe - Supported account types: Accounts in this organizational directory only
- Redirect URI:
- Type: Web
- URI:
https://a10e.company.com/auth/callback
- Name:
-
Click Register and note the Application (client) ID
Step 2: Create Client Secret
Section titled “Step 2: Create Client Secret”- In your app registration, go to Certificates & secrets
- Click New client secret
- Add description:
Alien Giraffe Client Secret - Choose expiration (recommend 24 months)
- Click Add and copy the secret value immediately (you can’t view it again)
Step 3: Configure API Permissions
Section titled “Step 3: Configure API Permissions”-
Go to API permissions
-
Click Add a permission → Microsoft Graph → Delegated permissions
-
Add permissions:
User.ReademailopenidprofileGroupMember.Read.All(for group sync)
-
Click Grant admin consent
Step 4: Configure Group Claims
Section titled “Step 4: Configure Group Claims”- Go to Token configuration
- Click Add groups claim
- Select Security groups
- Choose ID and access tokens
Step 5: Create Integration in Alien Giraffe
Section titled “Step 5: Create Integration in Alien Giraffe”Create identity/azure-ad.yaml:
apiVersion: v1kind: IdentityProvidermetadata: name: azure-ad namespace: production
spec: type: oidc provider: azure-ad
config: issuer: https://login.microsoftonline.com/{tenant-id}/v2.0 clientId: your-application-id clientSecretRef: azure-ad-secret scopes: - openid - profile - email - User.Read
attributeMapping: - claim: email target: user.email required: true
- claim: given_name target: user.firstName
- claim: family_name target: user.lastName
- claim: groups target: user.teams
groupMapping: # Map Azure AD group object IDs to team names - azureGroupId: "a1b2c3d4-..." team: engineering
- azureGroupId: "e5f6g7h8-..." team: data-science
groupSync: enabled: true schedule: "0 * * * *" # HourlyStep 6: Apply Configuration
Section titled “Step 6: Apply Configuration”# Create secretcat > azure-ad-secret.yaml <<EOFapiVersion: v1kind: Secretmetadata: name: azure-ad-secrettype: credentialsdata: clientId: your-application-id clientSecret: your-client-secret tenantId: your-tenant-idEOF
a10e secret apply -f azure-ad-secret.yaml
# Apply identity providera10e identity-provider apply -f identity/azure-ad.yaml
# Testa10e identity-provider test azure-adQuick Start: Google Workspace
Section titled “Quick Start: Google Workspace”Google Workspace (formerly G Suite) integration for Google-based organizations.
Step 1: Create OAuth Client
Section titled “Step 1: Create OAuth Client”-
Go to Google Cloud Console
-
Create a new project or select existing
-
Navigate to APIs & Services → Credentials
-
Click Create Credentials → OAuth client ID
-
Configure:
- Application type: Web application
- Name:
Alien Giraffe - Authorized redirect URIs:
https://a10e.company.com/auth/callback
-
Click Create and note:
- Client ID
- Client Secret
Step 2: Enable Required APIs
Section titled “Step 2: Enable Required APIs”- Navigate to APIs & Services → Library
- Enable these APIs:
- Google+ API (for user info)
- Admin SDK API (for group sync)
Step 3: Configure Domain-Wide Delegation (for Group Sync)
Section titled “Step 3: Configure Domain-Wide Delegation (for Group Sync)”- Navigate to IAM & Admin → Service Accounts
- Create service account:
alien-giraffe-sync - Grant role: Project → Viewer
- Create and download JSON key
- In Google Workspace Admin:
- Go to Security → API Controls → Domain-wide Delegation
- Add client ID with scopes:
https://www.googleapis.com/auth/admin.directory.group.readonly
Step 4: Create Integration in Alien Giraffe
Section titled “Step 4: Create Integration in Alien Giraffe”Create identity/google-workspace.yaml:
apiVersion: v1kind: IdentityProvidermetadata: name: google-workspace namespace: production
spec: type: oidc provider: google
config: hostedDomain: company.com # Restrict to your domain clientId: your-client-id.apps.googleusercontent.com clientSecretRef: google-oauth-secret scopes: - openid - email - profile
attributeMapping: - claim: email target: user.email required: true validate: ".*@company\\.com$" # Ensure company domain
- claim: given_name target: user.firstName
- claim: family_name target: user.lastName
- claim: hd # Hosted domain target: user.domain
groupSync: enabled: true apiCredentialsRef: google-service-account schedule: "0 * * * *" # HourlyStep 5: Apply Configuration
Section titled “Step 5: Apply Configuration”# Create OAuth secretcat > google-oauth-secret.yaml <<EOFapiVersion: v1kind: Secretmetadata: name: google-oauth-secrettype: credentialsdata: clientId: your-client-id.apps.googleusercontent.com clientSecret: your-client-secretEOF
# Create service account secret (for group sync)cat > google-service-account.yaml <<EOFapiVersion: v1kind: Secretmetadata: name: google-service-accounttype: credentialsdata: serviceAccountJson: | { "type": "service_account", "project_id": "your-project", ... }EOF
# Apply secrets and identity providera10e secret apply -f google-oauth-secret.yamla10e secret apply -f google-service-account.yamla10e identity-provider apply -f identity/google-workspace.yaml
# Testa10e identity-provider test google-workspaceUser and Team Synchronization
Section titled “User and Team Synchronization”How Sync Works
Section titled “How Sync Works”When enabled, Alien Giraffe periodically:
- Queries your IdP for users and groups
- Maps attributes using your configuration
- Creates/updates users in Alien Giraffe
- Assigns teams based on group memberships
- Deactivates users removed from IdP
Configure Sync Schedule
Section titled “Configure Sync Schedule”spec: groupSync: enabled: true schedule: "*/15 * * * *" # Every 15 minutes (cron format) fullSyncSchedule: "0 2 * * *" # Full sync daily at 2 AMAttribute Mapping
Section titled “Attribute Mapping”Map IdP attributes to Alien Giraffe user fields:
spec: attributeMapping: # Basic attributes - claim: email target: user.email required: true
- claim: name target: user.fullName
# Custom attributes - claim: department target: user.department
- claim: employee_id target: user.employeeId
# With transformation - claim: email target: user.username transform: extract-before-at # alice@company.com → alice
# With validation - claim: email target: user.email validate: ".*@(company\\.com|partner\\.com)$"Group Mapping
Section titled “Group Mapping”Map IdP groups to Alien Giraffe teams:
Direct Mapping:
spec: groupMapping: - externalGroup: "Engineering-Team" team: engineering
- externalGroup: "Data-Science" team: data-sciencePattern-Based Mapping:
spec: groupMapping: - pattern: "a10e-*" transform: remove-prefix # a10e-engineering → engineering
- pattern: "*-admin" transform: add-admin-role # Set admin role flagManual Sync Trigger
Section titled “Manual Sync Trigger”# Manually trigger a synca10e identity-provider sync okta
# Sync specific groupsa10e identity-provider sync okta --groups engineering,data-science
# Full sync (all users and groups)a10e identity-provider sync okta --full
# View sync statusa10e identity-provider sync-status oktaManaging Users and Teams
Section titled “Managing Users and Teams”View Users
Section titled “View Users”# List all usersa10e user list
# View user detailsa10e user get alice@company.com
# See user's teamsa10e user teams alice@company.comView Teams
Section titled “View Teams”# List all teamsa10e team list
# View team membersa10e team members engineering
# View team access policiesa10e team policies engineeringManual User Creation
Section titled “Manual User Creation”For users not in your IdP:
# Create a user manuallya10e user create contractor@external.com \ --first-name John \ --last-name Doe \ --teams contractor \ --role user
# Add user to teama10e user add-team contractor@external.com data-scienceTesting Authentication
Section titled “Testing Authentication”Test SSO Flow
Section titled “Test SSO Flow”# Test login with your IdPa10e auth login --provider okta
# Verify your sessiona10e auth whoami
# Test token claimsa10e auth token --decodeTest User Lookup
Section titled “Test User Lookup”# Test if a user existsa10e user get alice@company.com
# Test team membershipa10e user has-team alice@company.com engineeringTest Policy Evaluation
Section titled “Test Policy Evaluation”# Test if a user can access a sourcea10e policy test my-policy \ --user alice@company.com \ --source production-db \ --explainTroubleshooting
Section titled “Troubleshooting”Authentication Failures
Section titled “Authentication Failures”Problem: “Invalid client credentials”
# Verify client ID and secreta10e secret get okta-client-secret
# Test manually with curlcurl -X POST https://your-domain.okta.com/oauth2/v1/token \ -d "grant_type=client_credentials" \ -d "client_id=YOUR_CLIENT_ID" \ -d "client_secret=YOUR_CLIENT_SECRET"Problem: “Redirect URI mismatch”
- Verify redirect URI in IdP matches exactly:
https://a10e.company.com/auth/callback - Check for HTTP vs HTTPS
- Ensure no trailing slashes
Problem: “User not found after login”
# Check attribute mappinga10e identity-provider get okta
# View raw token claimsa10e auth login --provider okta --debug
# Check user was createda10e user listGroup Sync Issues
Section titled “Group Sync Issues”Problem: “Groups not syncing”
# Check sync statusa10e identity-provider sync-status okta
# View sync logsa10e logs --component identity-sync --since 1h
# Manually trigger synca10e identity-provider sync okta --fullProblem: “Permission denied to read groups”
- Verify API permissions granted (Azure AD, Google)
- Check service account has correct scopes (Google)
- Ensure admin consent granted (Azure AD)
Best Practices
Section titled “Best Practices”Security
Section titled “Security”- Use separate client credentials for each environment (dev, staging, prod)
- Rotate secrets regularly (every 90-180 days)
- Restrict group sync to only necessary groups (
filter: "a10e-*") - Enable MFA at the IdP level for all users
- Monitor authentication logs for suspicious activity
Reliability
Section titled “Reliability”- Configure fallback authentication in case IdP is down
- Cache user/group data to handle temporary IdP outages
- Set appropriate sync intervals (don’t sync too frequently)
- Monitor sync failures and alert on repeated failures
Attribute Mapping
Section titled “Attribute Mapping”- Use immutable identifiers when possible (employee ID, not email)
- Validate email domains to prevent external accounts
- Transform claims consistently (lowercase team names)
- Document custom mappings for future maintainers
Testing
Section titled “Testing”- Test with test users before rolling out
- Verify group sync with test groups first
- Monitor first week of new integrations closely
- Have rollback plan ready
Next Steps
Section titled “Next Steps”Now that your identity provider is integrated:
- Create Policies - Use teams in your access policies
- Configure Monitoring - Monitor authentication and sync
- Systems of Record Reference - Learn advanced IdP features
- Just-In-Time Access - Enable temporary access workflows
For provider-specific guides: