OAuth Apps Setup
Register your own OAuth applications for self-hosted Align.
Overview
Self-hosted Align requires you to create your own OAuth apps for each integration. This gives you full control over data access and permissions.
Slack App
Step 1: Create Slack App
- Go to api.slack.com/apps
- Click Create New App → From scratch
- Name: "Align" (or your preferred name)
- Select your workspace
Step 2: Configure OAuth & Permissions
-
Go to OAuth & Permissions
-
Add these Bot Token Scopes:
channels:history— Read messages in public channelsgroups:history— Read messages in private channelschat:write— Send messagesusers:read— Read user informationcommands— Add slash commands
-
Add these User Token Scopes (optional, for richer context):
channels:historygroups:history
Step 3: Configure Redirect URLs
Add your OAuth redirect URL:
https://api.yourdomain.com/auth/slack/callback
Step 4: Configure Event Subscriptions
- Go to Event Subscriptions
- Enable Events
- Request URL:
https://api.yourdomain.com/connectors/slack/events - Subscribe to bot events:
app_mentionmessage.channelsmessage.groups
Step 5: Configure Slash Commands (Optional)
- Go to Slash Commands
- Create:
/align - Request URL:
https://api.yourdomain.com/connectors/slack/commands
Step 6: Install to Workspace
- Go to Install App
- Click Install to Workspace
- Note your Bot Token and Signing Secret
Step 7: Configure Align
Create the Kubernetes secret:
kubectl create secret generic align-oauth-slack \
--namespace align \
--from-literal=client-id="YOUR_CLIENT_ID" \
--from-literal=client-secret="YOUR_CLIENT_SECRET" \
--from-literal=signing-secret="YOUR_SIGNING_SECRET"
Microsoft Teams App
Step 1: Create Azure AD App Registration
- Go to Azure Portal → Azure Active Directory
- App registrations → New registration
- Name: "Align"
- Supported account types: Choose based on your needs
- Redirect URI:
https://api.yourdomain.com/auth/teams/callback
Step 2: Configure API Permissions
Add these Microsoft Graph permissions:
| Permission | Type | Purpose |
|---|---|---|
ChannelMessage.Read.All | Application | Read channel messages |
ChannelMessage.Send | Delegated | Send messages |
User.Read.All | Application | Read user information |
Team.ReadBasic.All | Application | List teams |
Click Grant admin consent for your tenant.
Step 3: Create Client Secret
- Go to Certificates & secrets
- New client secret
- Note the secret value (only shown once)
Step 4: Create Bot Channel Registration
- Go to Azure Bot Service
- Create a new Bot
- Link to your App Registration
- Configure messaging endpoint:
https://api.yourdomain.com/connectors/teams/messages
Step 5: Configure Align
kubectl create secret generic align-oauth-teams \
--namespace align \
--from-literal=client-id="YOUR_CLIENT_ID" \
--from-literal=client-secret="YOUR_CLIENT_SECRET" \
--from-literal=bot-app-id="YOUR_BOT_APP_ID" \
--from-literal=bot-app-password="YOUR_BOT_PASSWORD"
Atlassian (Jira) App
Step 1: Create Atlassian App
- Go to developer.atlassian.com
- Create → OAuth 2.0 integration
- Name: "Align"
Step 2: Configure Permissions
Add these scopes:
read:jira-work— Read issues and projectswrite:jira-work— Write commentsread:jira-user— Read user information
Step 3: Configure Callback URL
https://api.yourdomain.com/auth/atlassian/callback
Step 4: Configure Align
kubectl create secret generic align-oauth-atlassian \
--namespace align \
--from-literal=client-id="YOUR_CLIENT_ID" \
--from-literal=client-secret="YOUR_CLIENT_SECRET"
GitHub App
Step 1: Create GitHub App
- Go to Settings → Developer settings → GitHub Apps
- New GitHub App
- Name: "Align" (must be unique on GitHub)
- Homepage URL:
https://app.yourdomain.com
Step 2: Configure Permissions
Repository permissions:
- Contents: Read
- Issues: Read & Write
- Pull requests: Read & Write
- Metadata: Read
Organization permissions:
- Members: Read (optional)
Step 3: Configure URLs
- Callback URL:
https://api.yourdomain.com/auth/github/callback - Webhook URL:
https://api.yourdomain.com/connectors/github/webhooks
Step 4: Generate Private Key
- Scroll to Private keys
- Generate a private key
- Download the
.pemfile
Step 5: Configure Align
kubectl create secret generic align-oauth-github \
--namespace align \
--from-literal=client-id="YOUR_CLIENT_ID" \
--from-literal=client-secret="YOUR_CLIENT_SECRET" \
--from-literal=app-id="YOUR_APP_ID" \
--from-file=app-private-key=./your-app.private-key.pem
Linear App
Step 1: Create Linear OAuth App
- Go to linear.app/settings → API → OAuth applications
- Create OAuth application
- Name: "Align"
- Redirect URI:
https://api.yourdomain.com/auth/linear/callback
Step 2: Configure Scopes
Request these scopes:
read— Read issues and commentswrite— Write comments
Step 3: Configure Align
kubectl create secret generic align-oauth-linear \
--namespace align \
--from-literal=client-id="YOUR_CLIENT_ID" \
--from-literal=client-secret="YOUR_CLIENT_SECRET"
Webhook URLs Reference
Configure these webhook/callback URLs in your OAuth apps:
| Integration | Callback URL | Webhook URL |
|---|---|---|
| Slack | https://api.{domain}/auth/slack/callback | https://api.{domain}/connectors/slack/events |
| Teams | https://api.{domain}/auth/teams/callback | https://api.{domain}/connectors/teams/messages |
| Jira | https://api.{domain}/auth/atlassian/callback | https://api.{domain}/connectors/jira/webhooks |
| GitHub | https://api.{domain}/auth/github/callback | https://api.{domain}/connectors/github/webhooks |
| Linear | https://api.{domain}/auth/linear/callback | https://api.{domain}/connectors/linear/webhooks |
Replace {domain} with your actual domain (e.g., yourdomain.com).