Rustelo/info/env_config.md

222 lines
6.3 KiB
Markdown
Raw Normal View History

# Environment Configuration
This document describes the environment variables needed for the authentication system.
## Required Environment Variables
### Database Configuration
```bash
DATABASE_URL=postgres://username:password@localhost:5432/database_name
```
### JWT Configuration
```bash
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
JWT_ISSUER=rustelo-auth
JWT_ACCESS_TOKEN_EXPIRES_IN=15 # minutes
JWT_REFRESH_TOKEN_EXPIRES_IN=7 # days
```
### Password Security
```bash
# Argon2 uses secure defaults, no configuration needed
```
### OAuth2 Configuration
#### Google OAuth
```bash
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
```
#### GitHub OAuth
```bash
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
```
#### Discord OAuth
```bash
DISCORD_CLIENT_ID=your-discord-client-id
DISCORD_CLIENT_SECRET=your-discord-client-secret
```
#### Microsoft OAuth
```bash
MICROSOFT_CLIENT_ID=your-microsoft-client-id
MICROSOFT_CLIENT_SECRET=your-microsoft-client-secret
MICROSOFT_TENANT_ID=common # or your specific tenant ID
```
### OAuth Redirect URLs
```bash
OAUTH_REDIRECT_BASE_URL=http://localhost:3030/api/auth/oauth/callback
```
## OAuth Provider Setup
### Google OAuth Setup
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select an existing one
3. Enable the Google+ API
4. Create OAuth 2.0 credentials
5. Add authorized redirect URIs:
- `http://localhost:3030/api/auth/oauth/callback/google` (development)
- `https://yourdomain.com/api/auth/oauth/callback/google` (production)
### GitHub OAuth Setup
1. Go to GitHub Settings > Developer settings > OAuth Apps
2. Create a new OAuth App
3. Set Authorization callback URL:
- `http://localhost:3030/api/auth/oauth/callback/github` (development)
- `https://yourdomain.com/api/auth/oauth/callback/github` (production)
### Discord OAuth Setup
1. Go to [Discord Developer Portal](https://discord.com/developers/applications)
2. Create a new application
3. Go to OAuth2 settings
4. Add redirect URIs:
- `http://localhost:3030/api/auth/oauth/callback/discord` (development)
- `https://yourdomain.com/api/auth/oauth/callback/discord` (production)
### Microsoft OAuth Setup
1. Go to [Azure Portal](https://portal.azure.com/)
2. Register a new application in Azure AD
3. Configure authentication platform (Web)
4. Add redirect URIs:
- `http://localhost:3030/api/auth/oauth/callback/microsoft` (development)
- `https://yourdomain.com/api/auth/oauth/callback/microsoft` (production)
## Database Setup
### PostgreSQL Setup
1. Install PostgreSQL
2. Create a database for your application
3. Run the application - tables will be created automatically
### Example Database Creation
```sql
CREATE DATABASE rustelo_dev;
CREATE USER rustelo_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE rustelo_dev TO rustelo_user;
```
## Security Considerations
### Production Environment
- Use strong, unique JWT secrets
- Use HTTPS for all OAuth redirect URLs
- Set secure cookie flags
- Use environment-specific database credentials
- Enable rate limiting
- Use secure password hashing costs (12 or higher)
### Development Environment
- Use different credentials than production
- OAuth redirect URLs should point to localhost
- JWT secrets can be simpler for development
- Database can be local
## Sample .env File
```bash
# Database
DATABASE_URL=postgres://rustelo_user:password@localhost:5432/rustelo_dev
# JWT
JWT_SECRET=development-secret-change-in-production
JWT_ISSUER=rustelo-auth
JWT_ACCESS_TOKEN_EXPIRES_IN=15
JWT_REFRESH_TOKEN_EXPIRES_IN=7
# Password
# Argon2 uses secure defaults, no configuration needed
# OAuth Base URL
OAUTH_REDIRECT_BASE_URL=http://localhost:3030/api/auth/oauth/callback
# Google OAuth (optional)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
# GitHub OAuth (optional)
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
# Discord OAuth (optional)
DISCORD_CLIENT_ID=your-discord-client-id
DISCORD_CLIENT_SECRET=your-discord-client-secret
# Microsoft OAuth (optional)
MICROSOFT_CLIENT_ID=your-microsoft-client-id
MICROSOFT_CLIENT_SECRET=your-microsoft-client-secret
MICROSOFT_TENANT_ID=common
```
## API Endpoints
### Authentication Endpoints
- `POST /api/auth/register` - Register new user
- `POST /api/auth/login` - Login with email/password
- `POST /api/auth/logout` - Logout current user
- `POST /api/auth/refresh` - Refresh access token
- `GET /api/auth/profile` - Get current user profile
- `PUT /api/auth/profile` - Update user profile
- `POST /api/auth/change-password` - Change password
### OAuth Endpoints
- `GET /api/auth/oauth/providers` - Get available OAuth providers
- `GET /api/auth/oauth/:provider/authorize` - Get OAuth authorization URL
- `GET /api/auth/oauth/:provider/callback` - Handle OAuth callback
### Password Reset Endpoints
- `POST /api/auth/password-reset/request` - Request password reset
- `POST /api/auth/password-reset/confirm` - Confirm password reset
### Admin Endpoints
- `GET /api/auth/admin/users/:id` - Get user by ID
- `POST /api/auth/admin/users/:id/verify-email` - Verify user email
- `POST /api/auth/admin/cleanup` - Clean up expired tokens/sessions
## Usage Examples
### Register User
```bash
curl -X POST http://localhost:3030/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"username": "newuser",
"password": "SecurePass123!",
"display_name": "New User"
}'
```
### Login
```bash
curl -X POST http://localhost:3030/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "SecurePass123!",
"remember_me": true
}'
```
### Get Profile (with JWT token)
```bash
curl -X GET http://localhost:3030/api/auth/profile \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
```
## Troubleshooting
### Common Issues
1. **Database connection failed**: Check DATABASE_URL and ensure PostgreSQL is running
2. **OAuth callback errors**: Verify redirect URLs match exactly in OAuth provider settings
3. **JWT token invalid**: Check JWT_SECRET and ensure it's the same across restarts
4. **Password validation fails**: Review password strength requirements
### Logging
The system logs authentication events. Check server logs for detailed error messages.