> ## Documentation Index
> Fetch the complete documentation index at: https://infisical.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Azure DevOps connection

> Learn how to configure an Azure DevOps Connection for Infisical.

Infisical currently supports three methods for connecting to Azure DevOps, which are OAuth, Azure DevOps Personal Access Token and Client Secrets.

> [accordion] Azure OAuth on a Self-Hosted Instance
>
> Using the Azure DevOps **OAuth connection** on a self-hosted instance of Infisical requires configuring an application in Azure
> and registering your instance with it.
>
> **Prerequisites:**
>
> * Set up Azure.
>
> **1. Create an application in Azure**
>
> Navigate to Entra ID > App registrations to create a new application.
>
> > [!NOTE]
> >
> > Azure Active Directory is now Microsoft Entra ID.
>
> ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-app-configuration/config-aad.png)
>
> ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-app-configuration/config-new-app.png)
>
> Create the application. As part of the form, set the **Redirect URI** to `https://your-domain.com/organization/app-connections/azure/oauth/callback`.
>
> > [!TIP]
> >
> > The domain you defined in the Redirect URI should be equivalent to the `SITE_URL` configured in your Infisical instance.
>
> ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/register-callback.png)
>
> **2. Assign API permissions to the application**
>
> For the Azure Connection to work with DevOps Pipelines, you need to assign the following permission to the application.
>
> #### Azure DevOps permissions
>
> Set the API permissions of the Azure application to include the following permissions:
>
> * Azure DevOps
>   * `user_impersonation`
>   * `vso.project_write`
>   * `vso.variablegroups_manage`
>   * `vso.variablegroups_write`
>
>     ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-devops/app-api-permissions.png)
>
> **3. Add your application credentials to Infisical**
>
> Obtain the **Application (Client) ID** and **Directory (Tenant) ID** (this will be used later in the Infisical connection) in Overview and generate a **Client Secret** in Certificate & secrets for your Azure application.
>
> ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/client-secrets/config-credentials-1.png)
>
> ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-app-configuration/config-credentials-2.png)
>
> ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-app-configuration/config-credentials-3.png)
>
> Back in your Infisical instance, add two new environment variables for the credentials of your Azure application.
>
> * `INF_APP_CONNECTION_AZURE_DEVOPS_CLIENT_ID`: The **Application (Client) ID** of your Azure application.
> * `INF_APP_CONNECTION_AZURE_DEVOPS_CLIENT_SECRET`: The **Client Secret** of your Azure application.
>
> Once added, restart your Infisical instance and use the Azure Client Secrets connection.

> [accordion] Azure DevOps personal access token (PAT)
>
> #### Create a new Azure DevOps personal access token (PAT)
>
> When using the Azure DevOps **Access Token connection** you'll need to create a new personal access token (PAT) in order to authenticate Infisical with Azure DevOps.
>
> **1. Navigate to Azure DevOps**
>
> ![integrations](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-devops/overview-page.png)
>
> **2. Create a new token**
>
> Make sure the newly created token has Read/Write access to the Release scope.
>
> ![integrations](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-devops/create-new-token.png)
>
> > [!NOTE]
> >
> > Please make sure that the token has access to the following scopes: Variable Groups *(read, create, & manage)*, Release *(read/write)*, Project and Team *(read)*, Service Connections *(read & query)*
>
> **3. Copy the new access token**
>
> Copy the newly created token as this will be used to authenticate Infisical with Azure DevOps.
>
> ![integrations](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-devops/new-token-created.png)

> [accordion] Client Secret Authentication
>
> To use client secret authentication, ensure your Azure Service Principal has the required permissions and is connected to the Azure DevOps organization and projects you want to use.
>
> **Prerequisites:**
>
> * Set up Azure and have an existing Azure DevOps organization.
> * The service principal must be connected to your target Azure DevOps organization and project(s)
>
> **1. Assign API permissions to the service principal**
>
> Configure the required API permissions for your App Registration to interact with Azure DevOps:
>
> #### Azure DevOps permissions
>
> Set the API permissions of your Azure service principal to include the following Azure DevOps permissions:
>
> * Azure DevOps
>   * `user_impersonation`
>
>   * `vso.project_write`
>
>   * `vso.variablegroups_manage`
>
>   * `vso.variablegroups_write`
>
>     ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/integrations/azure-devops/app-api-permissions.png)
>
> > [!NOTE]
> >
> > If you want to configure automatic client secret rotation for this App Connection, you also need to grant either `Application.ReadWrite.OwnedBy` or `Application.ReadWrite.All` permissions.

## Setup Azure connection in Infisical

**1. Navigate to App Connections**

Navigate to the **Integrations** tab in the desired project, then select **App Connections**. ![App Connections
Tab](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/general/add-connection.png)

**2. Add Connection**

Select the **Azure Connection** option from the connection options modal. ![Select Azure Connection](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/select-connection.png)

**3. Create Connection**

> [tab] OAuth
>
> **1. Fill in Connection Details**
>
> Fill in the **Tenant ID** field with the Directory (Tenant) ID you obtained in the previous [step](#azure-oauth-on-a-self-hosted-instance). Also fill in the organization name of the Azure DevOps organization you want to connect to.
>
> ![Fill in Connection Details](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/fill-in-connection-details-oauth.png)
>
> > [!TIP]
> >
> > You can find the **Organization Name** on [https://dev.azure.com/](https://dev.azure.com/)
>
> > [!NOTE]
> >
> > If you use Infisical Cloud, the OAuth flow requests every permission on Infisical's shared Azure app registration (the `.default` scope), including the permissions for Azure App Configuration. If your Azure tenant doesn't have the Azure App Configuration service principal, the OAuth flow fails. To create the service principal, run the following [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) command, then try to connect again:
> >
> > ```bash theme={"dark"}
> > az ad sp create --id 35ffadb3-7fc1-497e-b61b-381d28e744cc
> > ```
> >
> > `35ffadb3-7fc1-497e-b61b-381d28e744cc` is the application ID that Microsoft assigns to Azure App Configuration, and it's the same in every Azure tenant.
>
> **2. Grant Access**
>
> You will then be redirected to Azure to grant Infisical access to your Azure account. Once granted,
> you will be redirected back to Infisical's App Connections page. ![Azure Client Secrets
> Authorization](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/grant-access.png)

> [tab] Access Token
>
> **1. Fill in Connection Details**
>
> Fill in the **Access Token** field with the Access Token you obtained in the previous step. And the organization name of the Azure DevOps organization you want to connect to.
>
> ![Fill in Connection Details](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/fill-in-connection-details-token.png)
>
> > [!TIP]
> >
> > You can find the **Organization Name** on [https://dev.azure.com/](https://dev.azure.com/)

> [tab] Client Secret
>
> **1. Create Connection**
>
> Fill in the **Tenant ID**, **Client ID**, **Client Secret** and **Organization Name** fields with the Directory (Tenant) ID, Application (Client) ID, Client Secret and the organization name you obtained in the previous step.
>
> > [!TIP]
> >
> > You can find the **Organization Name** on [https://dev.azure.com/](https://dev.azure.com/)
>
> ![Connect via Azure OAuth](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/create-client-secrets-method.png)
>
> > [!TIP]
> >
> > You can optionally enable **Automatic Credential Rotation** for this connection. See the [Automatic Credential Rotation](#automatic-credential-rotation) section below for details.

**4. Connection Created**

Your **Azure DevOps Connection** is now available for use. ![Azure DevOps](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/devops-connection.png)

## Automatic credential rotation

When using the **Client Secret** authentication method, Infisical can automatically rotate the Client Secret of your Azure application on a recurring schedule. When enabled, Infisical will immediately generate a new Client Secret on connection creation and revoke the original one, ensuring that no external party retains access using the credentials you provided.

> [!NOTE]
>
> Automatic Credential Rotation is only available for the **Client Secret** authentication method.

**1. Locate the Key ID of your Client Secret**

Before enabling rotation, you'll need the **Key ID** of the Client Secret you're using to authenticate. Navigate to your App Registration in the Azure Portal, then go to **Certificates & secrets**. Copy the **Secret ID** (Key ID) of the secret you're providing to Infisical.

![Azure Client Secret Key ID](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/credential-rotation-key-id.png)

**2. Enable Automatic Credential Rotation**

When creating or editing your connection, toggle on the **Automatic Credential Rotation** switch.

![Enable Automatic Credential Rotation](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/credential-rotation-toggle.png)

**3. Provide the Client Secret Key ID**

Enter the **Key ID** you copied in the previous step into the **Client Secret Key ID** field. Infisical uses this to revoke your original secret after generating a new one.

![Client Secret Key ID Field](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/credential-rotation-key-id-field.png)

**4. Configure the Rotation Schedule**

Set the **Rotation Interval** (in days) to define how often the credential should be rotated, and set **Rotate At** to the local time of day at which the rotation should occur.

* **Rotation Interval** - How many days between each rotation.
* **Rotate At** - The local time of day at which the rotation will be triggered.

  ![Rotation Schedule](https://mintlify.s3.us-west-1.amazonaws.com/infisical/images/app-connections/azure/devops/credential-rotation-schedule.png)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.