The Azure Identity library provides Microsoft Entra ID token authentication support across the Azure SDK with a comprehensive set of TokenCredential implementations.
—
Authenticates using Azure Pipelines service connections for CI/CD scenarios, enabling secure authentication in Azure DevOps pipeline environments.
Acquires tokens using Azure Pipelines service connection for CI/CD authentication.
/**
* Azure Pipelines credential for CI/CD environments
*/
class AzurePipelinesCredential implements TokenCredential {
Mono<AccessToken> getToken(TokenRequestContext request);
AccessToken getTokenSync(TokenRequestContext request);
}
class AzurePipelinesCredentialBuilder extends AadCredentialBuilderBase<AzurePipelinesCredentialBuilder> {
AzurePipelinesCredentialBuilder serviceConnectionId(String serviceConnectionId);
AzurePipelinesCredentialBuilder systemAccessToken(String systemAccessToken);
AzurePipelinesCredentialBuilder tokenCachePersistenceOptions(TokenCachePersistenceOptions tokenCachePersistenceOptions);
AzurePipelinesCredential build();
}Usage Examples:
import com.azure.identity.AzurePipelinesCredential;
import com.azure.identity.AzurePipelinesCredentialBuilder;
// Basic usage in Azure Pipelines
TokenCredential credential = new AzurePipelinesCredentialBuilder()
.clientId("your-client-id")
.tenantId("your-tenant-id")
.serviceConnectionId("your-service-connection-id")
.systemAccessToken(System.getenv("SYSTEM_ACCESSTOKEN"))
.build();
// Use in pipeline tasks
StorageClient client = new StorageClientBuilder()
.endpoint("https://mystorageaccount.blob.core.windows.net")
.credential(credential)
.buildClient();In Azure DevOps:
# azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
serviceConnectionId: 'your-service-connection-id'
steps:
- task: JavaToolInstaller@0
inputs:
versionSpec: '11'
jdkArchitectureOption: 'x64'
jdkSourceOption: 'PreInstalled'
- script: |
mvn clean compile exec:java -Dexec.mainClass="com.example.MyApp"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
SERVICE_CONNECTION_ID: $(serviceConnectionId)
displayName: 'Run Java application'public class PipelineApp {
public static void main(String[] args) {
// Get values from environment
String serviceConnectionId = System.getenv("SERVICE_CONNECTION_ID");
String systemAccessToken = System.getenv("SYSTEM_ACCESSTOKEN");
// Create credential
TokenCredential credential = new AzurePipelinesCredentialBuilder()
.clientId("your-client-id")
.tenantId("your-tenant-id")
.serviceConnectionId(serviceConnectionId)
.systemAccessToken(systemAccessToken)
.build();
// Use with Azure services
// ... your application logic
}
}Required Environment Variables:
SYSTEM_OIDCREQUESTURI - Automatically set by Azure PipelinesSystem Access Token: The pipeline must have access to the system access token:
# Enable OAuth token access
steps:
- script: echo "Using system token"
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)// With token cache persistence
TokenCredential credential = new AzurePipelinesCredentialBuilder()
.clientId("your-client-id")
.tenantId("your-tenant-id")
.serviceConnectionId("service-connection-id")
.systemAccessToken(System.getenv("SYSTEM_ACCESSTOKEN"))
.tokenCachePersistenceOptions(new TokenCachePersistenceOptions()
.setName("PipelineTokenCache"))
.additionallyAllowedTenants("tenant1", "tenant2")
.build();Throws CredentialUnavailableException when:
SYSTEM_OIDCREQUESTURI environment variable is not setCommon Issues:
Install with Tessl CLI
npx tessl i tessl/maven-com-azure--azure-identitydocs