Security Overview
Discord for Jira connects Jira Cloud and Discord through Atlassian Forge and a Firnity-operated backend on Microsoft Azure. The backend also retains Atlassian Connect support for existing installations. This page describes the app's access controls, data handling and current infrastructure. See the Atlassian Marketplace listing.
Hosting & Infrastructure
- The remote backend and primary Azure SQL database are hosted in Azure's West Europe region.
- Production and development use separate Azure subscriptions, SQL servers, Key Vaults and monitoring resources.
- Azure SQL transparent data encryption protects database records at rest. Automated backups provide a seven-day point-in-time recovery window using geo-redundant backup storage.
- The database uses a public endpoint restricted by IP firewall rules for application and permitted administrative access.
- Runtime secrets are loaded from Azure Key Vault. The production backend uses an Azure managed identity to authenticate to Key Vault.
- The production backend requires HTTPS with TLS 1.2 or later. Azure SQL also requires TLS 1.2 or later.
Authentication & Permissions
Requests from Atlassian Forge use signed Forge Invocation Tokens tied to the verified Jira installation. Jira operations use the app or user authorization appropriate to the requested action. Existing Atlassian Connect installations also use signed JWT authorization bound to the installed site.
Forge app-system tokens are short-lived, and background requests stop using it before expiry.
Discord interactions are authenticated with Ed25519 cryptographic signatures. Account linking uses OAuth 2.0 with protections against reused or intercepted authorization responses. The app stores the Discord-to-Jira account association; Discord OAuth access and refresh tokens are not persisted.
Global setup requires Jira administration permission, and project configuration requires the relevant project administration permission.
Project and server settings determine who can search for or create issues: features can be disabled, limited to linked Jira users, or opened to Discord users. Linked-user searches use that person's Jira access. Configured guest access uses the app's Jira authorization and does not require every requester to have a Jira account. Jira actions such as commenting, assigning and changing status have their own authorization requirements.
Notifications, automatic issue previews and configured ticket workflows use the app's Jira access and share content with their Discord destinations. Discord server, channel and thread permissions govern access within Discord. Jira permissions still govern opening the linked issue in Jira. Customers should configure both systems for their intended audience.
Data Handling & Residency
Jira holds the issues, tickets, comments and attachments created through the integration. The backend retrieves and processes Jira and Discord content for searches, notifications, ticket creation and linked discussions. Configured workflows send selected issue fields, comments, attachments and user information to Discord, and can copy Discord conversation content into Jira.
The Azure SQL database stores records such as:
- Installation mappings, integration credentials and cached short-lived Forge app-system tokens with their expiry.
- Discord server, channel, thread and message IDs; linked account IDs and Discord profile fields such as usernames and language preferences.
- Project and server configuration, notification rules, ticket settings, mention-comparison records and discussion mappings.
- Operational email recipients, delivery and unsubscribe history.
- Saved issue-creation form values and temporary AI suggestions used by creation and retry workflows.
- Short-lived OAuth linking state and authorization-flow context.
AI preview suggestions are available for 30 minutes. The app attempts to remove them after successful use and runs production cleanup of expired previews every 15 minutes. Saved issue forms are removed after successful creation; unused form records do not currently have enforced expiry or scheduled cleanup.
The primary app-hosted database is in West Europe. Its location does not automatically follow Jira's data residency setting. Discord, email and AI processing involve the providers described below.
Discord & Email Integration
Customers choose the Discord servers, channels, threads, event rules and fields used for notifications. Messages already delivered to Discord follow Discord's access and retention controls. Removing an app connection does not erase those messages or content already copied into Jira.
Operational email uses Twilio SendGrid. Depending on the workflow, the provider receives a Marketplace billing or technical contact, or a Jira user's available email address, together with service-warning or setup information. Email recipient and delivery records are stored by the app. See the Privacy Policy for the related data handling.
AI-Assisted Ticket Workflows
Azure OpenAI processes selected Discord messages and author names, request type and field definitions, and Jira ticket or workflow information to suggest fields or assist ticket-closing workflows. Ticket-closing analysis can include recent conversation messages and their authors.
Although the Azure AI resource is in Sweden Central, Microsoft's global processing arrangements can process prompts and responses in other geographies. App-side temporary-data cleanup does not control Microsoft's separate processing and abuse-monitoring records. See Microsoft's data-processing explanation.
Logging & Safeguards
Application Insights provides backend diagnostics, and Sentry captures frontend errors. Diagnostic records include Jira site IDs, Atlassian or Discord account IDs, installation IDs and Discord destination IDs, request routes and error details. Some command logs also include Discord usernames. Forge failures can include submitted admin settings for diagnosis. Error messages and selected diagnostic fields can contain user-supplied text or provider responses.
Logging redacts recognized credentials and sanitizes sensitive URL parameters. The Forge webhook logging boundary excludes full Jira event bodies. These controls do not mean that every diagnostic field contains only technical IDs.
The main Azure request, trace, exception and event tables retain records for 90 days. Configured Azure Monitor alerts cover service availability and failure anomalies.
Backend-hosted pages restrict script execution and referrer disclosure, and sensitive dynamic responses are not cached. Forge controls the content policy for its interface embedded in Jira. Requests validate submitted settings and authorization context. Database operations use structured query values to protect against injection.
Privacy, Export & Deletion
Disconnecting an account in Personal Settings removes its saved association and personal notification settings. A verified Forge uninstall stops access and clears stored Forge credentials. App-hosted tenant data is kept for 30 days, then deleted at the next daily cleanup. Reinstalling on the same Jira site during this period recovers retained data after fresh authorization and cancels deletion.
Backups have a separate seven-day recovery window. Backup files can remain longer to support this recovery window. Limited installation IDs, installation times and site details remain without a fixed expiry to recognize the installation and deny old authorization. Diagnostic records and content already sent to other platforms follow their separate retention rules. Contact contact@firnity.com for verified return or erasure under the DPA.
Vulnerability Reporting
Report suspected vulnerabilities to contact@firnity.com, including a description, reproduction steps and potential impact. We aim to respond within 48 hours.