199 lines
4.7 KiB
Markdown
199 lines
4.7 KiB
Markdown
|
|
# Identity Setup Guide - Keycloak Configuration
|
||
|
|
|
||
|
|
Guide for setting up sovereign identity management using Keycloak (NO Azure dependencies).
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
Sankofa Phoenix uses Keycloak for identity management, providing a sovereign alternative to Azure AD with superior features:
|
||
|
|
|
||
|
|
- **Self-hosted**: No Microsoft dependencies
|
||
|
|
- **Multi-realm support**: One realm per tenant for complete isolation
|
||
|
|
- **Flexible authentication**: Custom flows, multiple providers
|
||
|
|
- **Fine-grained permissions**: Beyond Azure RBAC
|
||
|
|
- **Blockchain integration**: Optional blockchain-based identity verification
|
||
|
|
|
||
|
|
## Keycloak Installation
|
||
|
|
|
||
|
|
### Docker Compose
|
||
|
|
|
||
|
|
Keycloak is included in `docker-compose.yml`:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
keycloak:
|
||
|
|
image: quay.io/keycloak/keycloak:latest
|
||
|
|
environment:
|
||
|
|
KEYCLOAK_ADMIN: admin
|
||
|
|
KEYCLOAK_ADMIN_PASSWORD: admin
|
||
|
|
KC_DB: postgres
|
||
|
|
KC_DB_URL_HOST: postgres
|
||
|
|
KC_DB_URL_DATABASE: keycloak
|
||
|
|
KC_DB_USERNAME: postgres
|
||
|
|
KC_DB_PASSWORD: postgres
|
||
|
|
KC_HTTP_ENABLED: "true"
|
||
|
|
ports:
|
||
|
|
- "8080:8080"
|
||
|
|
command: start-dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### Kubernetes Deployment
|
||
|
|
|
||
|
|
See `gitops/apps/keycloak/` for Kubernetes manifests.
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
### Environment Variables
|
||
|
|
|
||
|
|
```env
|
||
|
|
KEYCLOAK_URL=https://keycloak.sankofa.nexus
|
||
|
|
KEYCLOAK_REALM=master
|
||
|
|
KEYCLOAK_CLIENT_ID=sankofa-api
|
||
|
|
KEYCLOAK_CLIENT_SECRET=your-client-secret
|
||
|
|
KEYCLOAK_MULTI_REALM=true
|
||
|
|
```
|
||
|
|
|
||
|
|
### Multi-Realm Support
|
||
|
|
|
||
|
|
Enable multi-realm support for tenant isolation:
|
||
|
|
|
||
|
|
```env
|
||
|
|
KEYCLOAK_MULTI_REALM=true
|
||
|
|
```
|
||
|
|
|
||
|
|
When enabled, each tenant gets its own Keycloak realm automatically.
|
||
|
|
|
||
|
|
## Client Configuration
|
||
|
|
|
||
|
|
### API Client
|
||
|
|
|
||
|
|
1. Log in to Keycloak admin console
|
||
|
|
2. Create new client:
|
||
|
|
- Client ID: `sankofa-api`
|
||
|
|
- Client Protocol: `openid-connect`
|
||
|
|
- Access Type: `confidential`
|
||
|
|
- Valid Redirect URIs: `*`
|
||
|
|
- Service Accounts Enabled: `ON`
|
||
|
|
|
||
|
|
3. Get client secret from Credentials tab
|
||
|
|
|
||
|
|
### Portal Client
|
||
|
|
|
||
|
|
1. Create new client:
|
||
|
|
- Client ID: `portal-client`
|
||
|
|
- Client Protocol: `openid-connect`
|
||
|
|
- Access Type: `confidential`
|
||
|
|
- Valid Redirect URIs: `http://localhost:3000/*`
|
||
|
|
- Web Origins: `http://localhost:3000`
|
||
|
|
|
||
|
|
## Identity Providers
|
||
|
|
|
||
|
|
### SAML Provider
|
||
|
|
|
||
|
|
Configure SAML provider for enterprise SSO:
|
||
|
|
|
||
|
|
1. Go to Identity Providers
|
||
|
|
2. Add SAML provider
|
||
|
|
3. Configure:
|
||
|
|
- Alias: `saml-enterprise`
|
||
|
|
- Display Name: `Enterprise SAML`
|
||
|
|
- First Broker Login Flow: `first broker login`
|
||
|
|
- Post Broker Login Flow: `browser`
|
||
|
|
|
||
|
|
### OIDC Provider
|
||
|
|
|
||
|
|
Configure OIDC provider for federated identity:
|
||
|
|
|
||
|
|
1. Go to Identity Providers
|
||
|
|
2. Add OpenID Connect provider
|
||
|
|
3. Configure:
|
||
|
|
- Alias: `oidc-provider`
|
||
|
|
- Provider URL: `https://provider.example.com`
|
||
|
|
- Client ID: `client-id`
|
||
|
|
- Client Secret: `client-secret`
|
||
|
|
|
||
|
|
### LDAP Provider
|
||
|
|
|
||
|
|
Configure LDAP for directory integration:
|
||
|
|
|
||
|
|
1. Go to User Federation
|
||
|
|
2. Add LDAP provider
|
||
|
|
3. Configure connection settings
|
||
|
|
4. Sync users and groups
|
||
|
|
|
||
|
|
## Custom Authentication Flows
|
||
|
|
|
||
|
|
Create custom authentication flows (more flexible than Azure AD):
|
||
|
|
|
||
|
|
1. Go to Authentication
|
||
|
|
2. Create new flow
|
||
|
|
3. Add execution providers:
|
||
|
|
- Username/Password form
|
||
|
|
- OTP form
|
||
|
|
- Blockchain verification (custom)
|
||
|
|
- Conditional OTP
|
||
|
|
|
||
|
|
## Blockchain Identity Verification
|
||
|
|
|
||
|
|
Enable blockchain-based identity verification (unique to Phoenix):
|
||
|
|
|
||
|
|
1. Set `BLOCKCHAIN_IDENTITY_ENABLED=true`
|
||
|
|
2. Configure blockchain RPC URL
|
||
|
|
3. Identity verification is performed on-chain
|
||
|
|
4. Immutable identity records
|
||
|
|
|
||
|
|
## Tenant Realm Creation
|
||
|
|
|
||
|
|
When a tenant is created, a Keycloak realm is automatically created if `KEYCLOAK_MULTI_REALM=true`:
|
||
|
|
|
||
|
|
- Realm name: Tenant ID
|
||
|
|
- Display name: Tenant name
|
||
|
|
- Enabled: True
|
||
|
|
- Users can authenticate to tenant-specific realm
|
||
|
|
|
||
|
|
## User Management
|
||
|
|
|
||
|
|
### Adding Users to Tenant
|
||
|
|
|
||
|
|
Users are added to tenant via the API:
|
||
|
|
|
||
|
|
```graphql
|
||
|
|
mutation {
|
||
|
|
addUserToTenant(
|
||
|
|
tenantId: "tenant-id"
|
||
|
|
userId: "user-id"
|
||
|
|
role: TENANT_ADMIN
|
||
|
|
)
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Roles and Permissions
|
||
|
|
|
||
|
|
Tenant roles are more granular than Azure RBAC:
|
||
|
|
|
||
|
|
- **TENANT_OWNER**: Full control
|
||
|
|
- **TENANT_ADMIN**: Administrative access
|
||
|
|
- **TENANT_USER**: Standard access
|
||
|
|
- **TENANT_VIEWER**: Read-only
|
||
|
|
- **TENANT_BILLING_ADMIN**: Billing management
|
||
|
|
|
||
|
|
Additional permissions can be set via JSON for fine-grained control.
|
||
|
|
|
||
|
|
## Comparison to Azure AD
|
||
|
|
|
||
|
|
| Feature | Azure AD | Keycloak (Phoenix) |
|
||
|
|
|---------|----------|-------------------|
|
||
|
|
| Self-hosted | No | Yes |
|
||
|
|
| Multi-realm | Limited | Full support |
|
||
|
|
| Custom flows | Limited | Full support |
|
||
|
|
| Permissions | RBAC only | RBAC + JSON |
|
||
|
|
| Blockchain | No | Yes |
|
||
|
|
| Cost | Per-user licensing | Open source |
|
||
|
|
|
||
|
|
## Best Practices
|
||
|
|
|
||
|
|
1. **Use strong passwords**: Enforce password policies
|
||
|
|
2. **Enable MFA**: Require multi-factor authentication
|
||
|
|
3. **Regular audits**: Review user access regularly
|
||
|
|
4. **Monitor logs**: Track authentication attempts
|
||
|
|
5. **Backup realms**: Export realm configurations regularly
|
||
|
|
|