Some checks failed
CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
CI/CD Pipeline / Policy Validation (push) Has been cancelled
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-firm-connectors) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-forms) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-hmrc) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ingestion) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-normalize-map) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ocr) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-indexer) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-reason) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rpa) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (ui-review) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (ui-review) (push) Has been cancelled
CI/CD Pipeline / Generate SBOM (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Notifications (push) Has been cancelled
297 lines
7.6 KiB
Markdown
297 lines
7.6 KiB
Markdown
# Authentik SSO Configuration for AI Tax Agent
|
|
|
|
This directory contains the configuration for Authentik SSO integration with the AI Tax Agent system.
|
|
|
|
## Overview
|
|
|
|
Authentik provides:
|
|
|
|
- **Single Sign-On (SSO)** for all services
|
|
- **ForwardAuth middleware** for Traefik
|
|
- **OIDC/OAuth2 providers** for applications
|
|
- **Role-based access control (RBAC)**
|
|
- **User and group management**
|
|
|
|
## Architecture
|
|
|
|
```
|
|
┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
|
|
│ User Browser │───▶│ Traefik │───▶│ Application │
|
|
└─────────────────┘ └──────────────┘ └─────────────────┘
|
|
│
|
|
▼
|
|
┌──────────────┐
|
|
│ Authentik │
|
|
│ ForwardAuth │
|
|
└──────────────┘
|
|
```
|
|
|
|
## Services
|
|
|
|
### Core Authentik Services
|
|
|
|
1. **authentik-db**: PostgreSQL database for Authentik
|
|
2. **authentik-redis**: Redis cache for sessions
|
|
3. **authentik-server**: Main Authentik server
|
|
4. **authentik-worker**: Background task worker
|
|
5. **authentik-outpost**: ForwardAuth proxy
|
|
|
|
### Integration Points
|
|
|
|
- **Traefik**: Uses ForwardAuth middleware
|
|
- **Grafana**: OIDC authentication
|
|
- **API Services**: JWT token validation
|
|
- **Review Portal**: NextAuth.js integration
|
|
|
|
## User Groups & Roles
|
|
|
|
| Group | Description | Permissions |
|
|
| ------------------ | --------------------- | -------------------------------------- |
|
|
| **Administrators** | System administrators | Full access to all services |
|
|
| **Tax Reviewers** | Review extracted data | Access to review portal, read-only API |
|
|
| **Accountants** | Firm accountants | Access to client data, forms |
|
|
| **Clients** | End clients | Limited access to own data |
|
|
|
|
## Applications
|
|
|
|
### 1. AI Tax Agent API
|
|
|
|
- **Client ID**: `ai-tax-agent-api`
|
|
- **Type**: OIDC/OAuth2
|
|
- **Scopes**: `openid`, `profile`, `email`, `roles`
|
|
- **Redirect URI**: `https://api.local.lan/auth/callback`
|
|
|
|
### 2. Grafana
|
|
|
|
- **Client ID**: `grafana`
|
|
- **Type**: OIDC/OAuth2
|
|
- **Scopes**: `openid`, `profile`, `email`
|
|
- **Redirect URI**: `https://grafana.local.lan/login/generic_oauth`
|
|
|
|
### 3. UI Review (ForwardAuth)
|
|
|
|
- **Provider Type**: Proxy Provider (ForwardAuth)
|
|
- **External Host**: `https://review.local.lan`
|
|
- **Internal Host**: `http://ui-review:3030`
|
|
- **Mode**: `forward_single`
|
|
- **Authentication**: Via Traefik ForwardAuth middleware
|
|
|
|
## Setup Instructions
|
|
|
|
### 1. Generate Secrets
|
|
|
|
```bash
|
|
make generate-secrets
|
|
```
|
|
|
|
### 2. Deploy Infrastructure
|
|
|
|
```bash
|
|
make deploy-infra
|
|
```
|
|
|
|
### 3. Initial Authentik Setup
|
|
|
|
1. Open https://auth.local.lan in your browser
|
|
2. Complete the initial setup wizard
|
|
3. Create admin user with email `admin@local.lan`
|
|
4. Set a secure password
|
|
|
|
### 4. Configure Applications
|
|
|
|
```bash
|
|
# Set API token from Authentik admin interface
|
|
export AUTHENTIK_API_TOKEN="your-api-token-here"
|
|
make setup-authentik
|
|
```
|
|
|
|
### 5. Verify Setup
|
|
|
|
- Access Authentik admin: https://auth.local.lan
|
|
- Test API authentication: https://api.local.lan/docs
|
|
- Check Grafana SSO: https://grafana.local.lan
|
|
|
|
## Configuration Files
|
|
|
|
### bootstrap.yaml
|
|
|
|
Initial configuration for:
|
|
|
|
- User groups
|
|
- OIDC providers
|
|
- Applications
|
|
- Policies
|
|
|
|
### exported-config.yaml
|
|
|
|
**UI Review Integration Blueprint** - Automated configuration for UI Review ForwardAuth integration:
|
|
|
|
- Proxy Provider configuration
|
|
- Application setup
|
|
- Outpost provider assignment
|
|
|
|
To apply this configuration:
|
|
|
|
```bash
|
|
# Apply UI Review integration
|
|
docker-compose -f docker-compose.local.yml exec authentik-server ak apply_blueprint /blueprints/exported-config.yaml
|
|
```
|
|
|
|
### custom-templates/
|
|
|
|
Custom login/logout templates (optional)
|
|
|
|
### media/
|
|
|
|
Uploaded media files (logos, etc.)
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Description | Default |
|
|
| ------------------------- | ---------------------- | ----------- |
|
|
| `AUTHENTIK_SECRET_KEY` | Encryption key | `changeme` |
|
|
| `AUTHENTIK_OUTPOST_TOKEN` | Outpost authentication | `changeme` |
|
|
| `AUTHENTIK_DB_PASSWORD` | Database password | `authentik` |
|
|
| `DOMAIN` | Base domain | `local` |
|
|
|
|
## Security Considerations
|
|
|
|
### Production Deployment
|
|
|
|
1. **Change all default passwords**
|
|
2. **Use strong secret keys** (50+ characters)
|
|
3. **Enable HTTPS** with valid certificates
|
|
4. **Configure proper CORS** origins
|
|
5. **Set up backup** for Authentik database
|
|
6. **Enable audit logging**
|
|
|
|
### Network Security
|
|
|
|
- Authentik services run on backend network only
|
|
- Only Traefik has access to frontend network
|
|
- Database and Redis are internal only
|
|
|
|
### Token Security
|
|
|
|
- JWT tokens include user roles and tenant ID
|
|
- Tokens are validated by each service
|
|
- Short token expiry (1 hour) with refresh
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Authentik not accessible**
|
|
|
|
```bash
|
|
# Check service status
|
|
docker-compose logs authentik-server
|
|
|
|
# Verify network connectivity
|
|
docker network ls | grep ai-tax-agent
|
|
```
|
|
|
|
2. **ForwardAuth not working**
|
|
|
|
```bash
|
|
# Check outpost logs
|
|
docker-compose logs authentik-outpost
|
|
|
|
# Verify Traefik configuration
|
|
docker-compose logs traefik
|
|
```
|
|
|
|
3. **OIDC authentication failing**
|
|
|
|
```bash
|
|
# Check provider configuration
|
|
curl -s https://auth.local.lan/.well-known/openid_configuration
|
|
|
|
# Verify redirect URIs
|
|
# Check client secrets
|
|
```
|
|
|
|
### Debug Mode
|
|
|
|
Enable debug logging:
|
|
|
|
```bash
|
|
# In docker-compose.local.lan.yml
|
|
AUTHENTIK_LOG_LEVEL: debug
|
|
```
|
|
|
|
## API Integration
|
|
|
|
### Getting User Information
|
|
|
|
Services receive user information via headers:
|
|
|
|
**ForwardAuth Headers (UI Review):**
|
|
|
|
- `x-authentik-username`: Username
|
|
- `x-authentik-email`: Email address
|
|
- `x-authentik-groups`: Comma-separated groups
|
|
- `x-authentik-name`: Full name
|
|
- `x-authentik-uid`: User ID
|
|
|
|
**Legacy Headers (Other Services):**
|
|
|
|
- `X-Authenticated-User`: Username
|
|
- `X-Authenticated-Email`: Email address
|
|
- `X-Authenticated-Groups`: Comma-separated groups
|
|
- `Authorization`: JWT Bearer token
|
|
|
|
### Example FastAPI Integration
|
|
|
|
```python
|
|
from libs.security import AuthenticationHeaders
|
|
|
|
@app.get("/protected")
|
|
async def protected_endpoint(request: Request):
|
|
auth = AuthenticationHeaders(request)
|
|
|
|
if not auth.has_role("Tax Reviewers"):
|
|
raise HTTPException(403, "Insufficient permissions")
|
|
|
|
return {"user": auth.authenticated_user}
|
|
```
|
|
|
|
## Monitoring
|
|
|
|
### Health Checks
|
|
|
|
- Authentik server: `https://auth.local.lan/-/health/ready/`
|
|
- Outpost: `http://authentik-outpost:9000/outpost.goauthentik.io/ping`
|
|
|
|
### Metrics
|
|
|
|
- Prometheus metrics: `https://auth.local.lan/metrics`
|
|
- Grafana dashboard: "Authentik Overview"
|
|
|
|
## Backup & Recovery
|
|
|
|
### Database Backup
|
|
|
|
```bash
|
|
# Backup Authentik database
|
|
docker exec authentik-db pg_dump -U authentik authentik > authentik_backup.sql
|
|
|
|
# Restore
|
|
docker exec -i authentik-db psql -U authentik authentik < authentik_backup.sql
|
|
```
|
|
|
|
### Configuration Backup
|
|
|
|
- Export flows and providers from admin interface
|
|
- Backup `bootstrap.yaml` and custom templates
|
|
- Store secrets securely (Vault, etc.)
|
|
|
|
## Support
|
|
|
|
For issues with Authentik configuration:
|
|
|
|
1. Check the [official documentation](https://goauthentik.io/docs/)
|
|
2. Review logs in `docker-compose logs authentik-server`
|
|
3. Verify network connectivity and DNS resolution
|
|
4. Check Traefik middleware configuration
|