Jira Integration¶
Faraday's Jira integration allows you to export confirmed vulnerabilities as Jira issues with full field mapping and maintain bidirectional status synchronization via Jira Automation rules. When a vulnerability status changes in Faraday, the linked Jira issue transitions automatically — and vice versa.
Availability: Commercial feature (requires licensed Faraday instance).
Verified against: Faraday Server v5.19.0 codebase, wiki doc dated 2025-10-28.
Overview¶
| Feature | Details |
|---|---|
| Export vulnerabilities to Jira Issues | Yes |
| Bidirectional status sync via webhooks | Yes (requires Jira Automation rule) |
| Multiple project support | Yes (configure and activate multiple projects) |
| Dynamic field mapping | Yes (mandatory + optional fields per issue type) |
| Jinja2 templates | Summary and Description fields only |
| Authentication | OAuth 1.0a (RSA-SHA1) via Application Link |
| Webhook endpoint | /_api/v3/integrations/jira/update-issues |
| Webhook auth header | X-Jira-Token with Faraday User Token (Jira scope) |
Status Mapping¶
Status mapping is fully configurable per project. You define both incoming (Jira → Faraday) and outgoing (Faraday → Jira) mappings independently.
Available Faraday statuses:
| Faraday Status |
|---|
| Open |
| Closed |
| Re-Opened |
| Risk Accepted |
Jira statuses depend on your project's workflow configuration and are fetched dynamically from your Jira instance.
Prerequisites¶
- A running Faraday Server instance (commercial edition)
- A Jira instance (Jira Cloud or Jira Server 8.x+)
- Ability to create an Application Link in Jira
- Network connectivity between Faraday Server and Jira
Step 1: Configure Connection Settings (OAuth)¶
Generate Keys in Faraday¶
- Log in to the Faraday Web UI.
- Go to Settings > Ticketing Tools > Jira.
- Open the Connection Settings tab.
- Click the Edit button to open the configuration fields.
- Enter your Jira Instance URL (e.g.,
https://faraday.atlassian.net). - Enter a Consumer Key Name (e.g.,
faraday-key). - Click Generate Public Key — a public key appears in the field.
- Copy the public key to your clipboard.
- Click Save Connection Settings.
Create Application Link in Jira¶
- In Jira, go to Administration > Applications > Application Links.
- Create a new Application Link:
| Field | Value |
|---|---|
| Application URL | Your Faraday instance URL (e.g., http://localhost:5985) |
| Consumer Key | The consumer key name from Faraday |
| Public Key | Paste the public key generated in Faraday |
For Jira Cloud, the Application Link setup may differ slightly. Refer to Atlassian's Application Links documentation.
Authorize the Connection¶
- Return to Faraday's Connection Settings tab.
- Click the Authorize button.
- If the connection fails, you will see an error message — verify your URL, consumer key, and public key match between Faraday and Jira.
- If successful, you will be prompted to allow Faraday access to read and write Jira data.
- After confirming access, the Connection Settings tab gear icon turns green.
Step 2: Configure Projects¶
Navigate to the Projects tab in the Jira configuration.
2.1 Fetch Projects¶
Click Fetch Projects to retrieve all available projects from your Jira instance. This populates the project dropdown. The button remains disabled while projects are loading.
2.2 Add Projects¶
Select projects from the dropdown to add them to the configuration table. You can add multiple projects.
2.3 Configure Issue Types and Fields¶
For each project:
- Click the red gear icon in the Issue Type column.
- Select an issue type from the list (e.g., Bug, Task, Story).
- Configure mandatory fields (marked with a red asterisk):
- Summary — supports Jinja2 templates using vulnerability data
- Description — supports Jinja2 templates using vulnerability data
- Other mandatory fields depend on the selected issue type
- Optionally add optional fields using the + button:
- Click to add from a list of available fields for the issue type
Supported Field Types¶
| Field Type | Description | Example |
|---|---|---|
string |
Text input | Summary, Description (supports Jinja2) |
option |
Single-select dropdown | Status, Resolution |
array |
Multi-select field | Components, Labels |
option-with-child |
Cascading select | Category > Subcategory |
priority |
Priority picker | High, Medium, Low |
version |
Version picker | Fix Version |
user |
User/assignee picker | Assignee, Reporter |
securitylevel |
Security level | Confidential |
group |
User group picker | Team groups |
component |
Component picker | Project components |
project |
Project picker | Target project |
Note: Only the Summary and Description fields support Jinja2 template syntax. All other fields accept fixed values.
2.4 Configure Bidirectional Status Mapping (Optional)¶
Click the red gear icon in the Attribute Mapping column to configure bidirectional status synchronization.
Outgoing (Faraday → Jira)¶
Maps Faraday vulnerability status changes to Jira issue transitions. When a vulnerability status changes in Faraday, the linked Jira issue automatically transitions to the mapped status.
Note: If the transition is not valid in Jira (due to workflow constraints), the synchronization will fail and the Jira issue will not update.
Incoming (Jira → Faraday)¶
Maps Jira issue status transitions to Faraday vulnerability status changes. When a linked Jira issue changes status, the webhook triggers and Faraday updates the vulnerability status per this mapping.
Note: Status updates triggered by incoming webhooks are not considered manual updates. This prevents infinite update loops.
2.5 Activate Projects¶
Once the issue type is configured (gear icon turns green):
- Click the checkbox to the left of each project row to activate it.
- Multiple projects can be active simultaneously.
- The trash can icon at the right of each row permanently deletes the project configuration (this cannot be undone).
2.6 Activate the Integration¶
If both the Connection Settings and Projects tabs show green gear icons, the integration slider at the top-left of the configuration panel becomes available. The integration activates automatically when you activate the first configured project.
Step 3: Set Up Bidirectional Sync (Jira Automation)¶
To enable Jira → Faraday status sync, create a Jira Automation rule:
Create Jira Automation Rule¶
- In Jira, go to Settings > System > Automation rules (or Project Settings > Automation for project-level rules).
- Create a new rule.
Trigger ("When")¶
| Setting | Value |
|---|---|
| Trigger type | Field value changed |
| Fields to monitor | Status |
Action ("Then")¶
| Setting | Value |
|---|---|
| Action type | Send Web Request |
| URL | https://<your-faraday-instance>/_api/v3/integrations/jira/update-issues |
| HTTP method | POST |
| Web request body | Custom data |
| Custom data | See JSON payload below |
Webhook payload:
{
"title": "{{issue.key}}",
"desc": "{{issue.description.jsonEncode()}}",
"priority": "{{issue.priority.name.jsonEncode()}}",
"status": "{{issue.status.name.jsonEncode()}}"
}
Headers¶
| Key | Value |
|---|---|
X-Jira-Token |
Your Faraday User Token (Jira scope) |
Create a Faraday User Token (Jira Scope)¶
- In Faraday, go to Preferences > Access Tokens.
- Click Add Token.
- Set the scope to Jira and choose an alias.
- Copy the token immediately — it is displayed only once.
- Paste this token as the
X-Jira-Tokenheader value in the Jira Automation rule.
Enable the Rule¶
Activate the automation rule in Jira. Once enabled, any status change on a Jira issue that has a linked Faraday vulnerability will trigger a webhook to Faraday.
Step 4: Export Vulnerabilities to Jira¶
- In the Faraday Web UI, go to Manage > Vulns.
- Select one or more confirmed vulnerabilities.
- Click Tools (context menu) and select Jira.
- If multiple projects are active, select the target project.
- Vulnerabilities are created as issues in the selected Jira project using the configured field mappings.
Tracking Exported Vulnerabilities¶
- Add the issuetracker column to the vulnerability table to see linked Jira issue keys.
- Click the Jira issue key in the column to open the issue directly in Jira.
- The
issuetracker_jsonfield provides structured details (issue URL, ID) and can be used in Executive Reports.
Vulnerability Model Fields¶
| Field | Purpose |
|---|---|
issuetracker |
Stores Jira issue key (e.g., PROJ-123) |
association_date |
Timestamp when vulnerability was linked to Jira issue |
disassociated_manually |
true if manually unlinked from Jira issue |
Jira Configuration Data Structure¶
The integration configuration is stored in the configuration database table
under the key jira_integration as JSON:
{
"url": "https://your-jira-instance.atlassian.net",
"consumer_key": "faraday-key",
"rsa_public_key": "-----BEGIN PUBLIC KEY-----...",
"authorization_state": "authorized",
"enabled": true,
"projects": {
"PROJECT_KEY": {
"ticket_config": {
"issue_types": {
"Bug": {
"fields": {
"Summary": {"schema": {"type": "string"}, "value": "JINJA_TEMPLATE"},
"Description": {"schema": {"type": "string"}, "value": "JINJA_TEMPLATE"},
"Priority": {"schema": {"type": "priority"}, "value": "High"}
}
}
}
},
"attribute_mapping": {
"incoming": {},
"outgoing": {}
}
}
}
}
Permissions¶
| Permission Unit | ID | Group | Description |
|---|---|---|---|
jira |
15 | integrations |
Jira integration CRUD operations |
active_integrations |
19 | integrations |
View/manage active integrations |
integrations_auth |
41 | integrations |
Integration authentication management |
The ticketing.jira extra permission controls access to the Jira ticketing
feature in the vulnerability context menu.
Data Model¶
UserToken Model¶
Tokens for Jira webhook authentication:
| Column | Type | Description |
|---|---|---|
id |
Integer | Primary key |
user_id |
Integer | FK to faraday_user |
token |
String | Unique token value |
alias |
String | Descriptive name |
expires_at |
DateTime | Optional expiration |
scope |
Enum | jira (also: gitlab, service_desk, scheduler) |
revoked |
Boolean | Whether token is revoked |
hide |
Boolean | Hide token in UI |
Configuration Storage¶
Integration settings are stored in the configuration database table:
CREATE TABLE configuration (
id INTEGER PRIMARY KEY,
key VARCHAR UNIQUE NOT NULL,
value JSONB NOT NULL,
create_date TIMESTAMP,
update_date TIMESTAMP,
creator_id INTEGER,
update_user_id INTEGER
);
Jira integration configuration is stored under the key jira_integration.
Troubleshooting¶
| Problem | Possible Cause | Solution |
|---|---|---|
| Authorization fails | Application Link misconfigured | Verify consumer key and public key match between Faraday and Jira |
| Cannot fetch projects | OAuth not authorized | Ensure the Connection Settings tab shows a green gear (authorized) |
| Mandatory field error when sending | Missing field configuration | Open the issue type configuration and fill all red-asterisk fields |
| Outgoing status sync fails | Invalid Jira transition | Verify the mapped Jira status is a valid transition from the current status in your workflow |
| Incoming webhook not triggering | Automation rule disabled | Ensure the Jira Automation rule is enabled and monitoring the Status field |
| Webhook returns 401 | Invalid or expired token | Verify the X-Jira-Token header value is a valid, non-expired, non-revoked Faraday User Token with Jira scope |
| Vulnerabilities not appearing in context menu | Wrong status | Only confirmed vulnerabilities can be sent to Jira |
| Integration slider unavailable | Incomplete setup | Both Connection Settings and Projects tabs must show green gear icons |
Checking Integration Status¶
- Connection Settings tab: Green gear = authorized, red gear = not connected.
- Projects tab: Green gear = at least one project activated.
- Issuetracker column: Add to vulnerability table to see linked issues.
- Access Tokens: Navigate to Preferences > Access Tokens to verify token status, scope, and expiration.
- Server logs: Check Faraday Server logs for webhook processing errors.
Changelog¶
| Date | Change |
|---|---|
| 2025-10-28 | Original wiki documentation published |
| 2026-02-27 | Updated: verified against v5.19.0 codebase, added permissions model, data model details, field type reference, configuration JSON structure, expanded troubleshooting, clarified OAuth flow and bidirectional sync |
Source References¶
- Wiki source:
repos/faraday-wiki/docs/integration-jira.md - Permission definitions:
faraday/server/utils/permissions.py—UNIT_JIRA - UserToken model:
faraday/server/models.py(line ~2636) —JIRA_SCOPE - VulnerabilityGeneric model:
faraday/server/models.py(line ~1431) —issuetracker,association_date,disassociated_manually - Configuration model:
faraday/server/models.py(line ~3641) - Extra permissions:
faraday/server/api/base.py(line ~2092) —ticketing.jira - Migration (Jira scope):
faraday/migrations/versions/000918b77c25_add_jira_scope.py - Migration (config table):
faraday/migrations/versions/b49d8efbd0c2_add_configuration_table.py - Migration (field reformat):
faraday/migrations/versions/06c48492f587_reformat_jira_issue_fields_value.py - Atlassian docs: Application Links