azure-identity-ts — скилл для Claude Code: вход в Azure из TypeScript
Скилл подсказывает агенту, как настроить аутентификацию в Azure через библиотеку @azure/identity в TypeScript. Пригодится, когда в проекте появляется DefaultAzureCredential или managed identity.
npx skills add microsoft/skills --skill azure-identity-ts -a claude-codeЧто делает azure-identity-ts
Скилл описывает работу с @azure/identity — библиотекой аутентификации для клиентов Azure SDK через Microsoft Entra ID. Внутри разобраны варианты учётных данных: DefaultAzureCredential для локальной разработки, managed identity для продакшена, service principal с секретом или сертификатом, вход через браузер и device code flow.
Есть отдельные разделы про переменные окружения. Для service principal это AZURE_TENANT_ID, AZURE_CLIENT_ID и AZURE_CLIENT_SECRET либо путь к сертификату в AZURE_CLIENT_CERTIFICATE_PATH. Для workload identity в Kubernetes — AZURE_FEDERATED_TOKEN_FILE. Если DefaultAzureCredential используется в продакшене, нужна переменная AZURE_TOKEN_CREDENTIALS=prod, иначе цепочка учётных данных остаётся в режиме разработки. Это повод проверить конфиг перед выкаткой.
Отдельно показаны developer-креденшелы: Azure CLI, Azure Developer CLI, Azure PowerShell и Visual Studio Code (для последнего нужен пакет @azure/identity-vscode и плагин через useIdentityPlugin). Для суверенных облаков задаётся authorityHost из AzureAuthorityHosts — Azure Government или Azure China. Есть примеры своей цепочки через ChainedTokenCredential и получения bearer-токена функцией getBearerTokenProvider.
Какие задачи решает
- настроить вход в Azure SDK без ручного разбора цепочки учётных данных
- подключить managed identity к клиенту Azure в продакшене
- вынести секреты service principal в переменные окружения
- сделать вход через браузер или device code для локальной отладки
- переключить аутентификацию на Azure Government или Azure China
Примеры запросов агенту
- Настрой аутентификацию в Azure для этого проекта через
@azure/identity - Замени секрет service principal на managed identity в этом клиенте
- Добавь вход через Azure CLI для локальной разработки
Как установить azure-identity-ts
1Через Skills CLI (Vercel)
npx skills add microsoft/skills --skill azure-identity-ts -a claude-code2Вручную: положить файлы
~/.claude/skills/azure-identity-ts/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/azure-identity-ts/
Вручную: положить файлы
.agents/skills/azure-identity-ts/SKILL.mdДля всех проектов — ~/.agents/skills/
Вручную: положить файлы
.cursor/skills/azure-identity-ts/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install microsoft/skills azure-identity-ts2Вручную: положить файлы
.github/skills/azure-identity-ts/SKILL.mdКомандой платформы
gemini skills install https://github.com/microsoft/skills --path .github/plugins/azure-sdk-typescript/skills/azure-identity-tsВручную: положить файлы
.devin/skills/azure-identity-ts/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Claude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о azure-identity-ts
Как установить azure-identity-ts в Claude?
Выполните npx skills add microsoft/skills --skill azure-identity-ts -a claude-code. После этого файл скилла окажется в ~/.claude/skills/azure-identity-ts/SKILL.md.
Что делает azure-identity-ts?
Показывает агенту, как настроить аутентификацию в Azure через @azure/identity: DefaultAzureCredential, managed identity, service principal, вход через браузер и device code.
Какие переменные окружения нужны для service principal?
AZURE_TENANT_ID, AZURE_CLIENT_ID и AZURE_CLIENT_SECRET для варианта с секретом. При аутентификации по сертификату вместо секрета указывается AZURE_CLIENT_CERTIFICATE_PATH.
Исходный текст
SKILL.md · MIT
---
name: azure-identity-ts
description: Authenticate to Azure services using Azure Identity library for JavaScript (@azure/identity). Use when configuring authentication with DefaultAzureCredential, managed identity, service principals, or interactive browser login.
license: MIT
metadata:
author: Microsoft
version: "1.0.0"
package: '@azure/identity'
---
# Azure Identity library for TypeScript
Authentication library for Azure SDK clients using Microsoft Entra ID.
## Installation
```bash
npm install @azure/identity
# For Visual Studio Code credential support
npm install @azure/identity-vscode
```
## Environment Variables
### Service Principal (Secret)
```bash
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
```
### Service Principal (Certificate)
```bash
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_CERTIFICATE_PATH=/path/to/cert.pem
AZURE_CLIENT_CERTIFICATE_PASSWORD=<optional-password>
```
### Workload Identity (Kubernetes)
```bash
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_FEDERATED_TOKEN_FILE=/var/run/secrets/tokens/azure-identity
```
## DefaultAzureCredential (Recommended for Local Development)
```typescript
import { DefaultAzureCredential, ManagedIdentityCredential } from "@azure/identity";
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
const credential = new DefaultAzureCredential({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]});
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/javascript/api/overview/azure/identity-readme?view=azure-node-latest#credential-classes
// const credential = new ManagedIdentityCredential();
// Use with any Azure SDK client
import { BlobServiceClient } from "@azure/storage-blob";
const blobClient = new BlobServiceClient(
"https://<account>.blob.core.windows.net",
credential
);
```
See [DefaultAzureCredential overview](https://aka.ms/azsdk/js/identity/credential-chains#defaultazurecredential-overview) for the current credential chain order and defaults.
## Managed Identity
### System-Assigned
```typescript
import { ManagedIdentityCredential } from "@azure/identity";
const credential = new ManagedIdentityCredential();
```
### User-Assigned (by Client ID)
```typescript
const credential = new ManagedIdentityCredential({
clientId: "<user-assigned-client-id>"
});
```
### User-Assigned (by Resource ID)
```typescript
const credential = new ManagedIdentityCredential({
resourceId: "/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<name>"
});
```
### User-Assigned (by Object ID)
```typescript
const credential = new ManagedIdentityCredential({
objectId: "<user-assigned-object-id>"
});
```
## Service Principal
### Client Secret
```typescript
import { ClientSecretCredential } from "@azure/identity";
const credential = new ClientSecretCredential(
"<tenant-id>",
"<client-id>",
"<client-secret>"
);
```
### Client Certificate
```typescript
import { ClientCertificateCredential } from "@azure/identity";
const credential = new ClientCertificateCredential(
"<tenant-id>",
"<client-id>",
{ certificatePath: "/path/to/cert.pem" }
);
// With password
const credentialWithPwd = new ClientCertificateCredential(
"<tenant-id>",
"<client-id>",
{
certificatePath: "/path/to/cert.pem",
certificatePassword: "<password>"
}
);
```
## Interactive Authentication
### Browser-Based Login
```typescript
import { InteractiveBrowserCredential } from "@azure/identity";
const credential = new InteractiveBrowserCredential({
clientId: "<client-id>",
tenantId: "<tenant-id>",
loginHint: "[email protected]"
});
```
### Device Code Flow
```typescript
import { DeviceCodeCredential } from "@azure/identity";
const credential = new DeviceCodeCredential({
clientId: "<client-id>",
tenantId: "<tenant-id>",
userPromptCallback: (info) => {
console.log(info.message);
// "To sign in, use a web browser to open..."
}
});
```
## Custom Credential Chain
```typescript
import {
ChainedTokenCredential,
ManagedIdentityCredential,
AzureCliCredential
} from "@azure/identity";
// Try managed identity first, fall back to CLI
const credential = new ChainedTokenCredential(
new ManagedIdentityCredential(),
new AzureCliCredential()
);
```
## Developer Credentials
### Visual Studio Code
```typescript
import { useIdentityPlugin, VisualStudioCodeCredential } from "@azure/identity";
import { vsCodePlugin } from "@azure/identity-vscode";
useIdentityPlugin(vsCodePlugin);
const credential = new VisualStudioCodeCredential();
```
### Azure CLI
```typescript
import { AzureCliCredential } from "@azure/identity";
const credential = new AzureCliCredential();
// Uses: az login
```
### Azure Developer CLI
```typescript
import { AzureDeveloperCliCredential } from "@azure/identity";
const credential = new AzureDeveloperCliCredential();
// Uses: azd auth login
```
### Azure PowerShell
```typescript
import { AzurePowerShellCredential } from "@azure/identity";
const credential = new AzurePowerShellCredential();
// Uses: Connect-AzAccount
```
## Sovereign Clouds
```typescript
import { ClientSecretCredential, AzureAuthorityHosts } from "@azure/identity";
// Azure Government
const credential = new ClientSecretCredential(
"<tenant>", "<client>", "<secret>",
{ authorityHost: AzureAuthorityHosts.AzureGovernment }
);
// Azure China
const credentialChina = new ClientSecretCredential(
"<tenant>", "<client>", "<secret>",
{ authorityHost: AzureAuthorityHosts.AzureChina }
);
```
## Bearer Token Provider
```typescript
import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity";
const credential = new DefaultAzureCredential({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]});
// Create a function that returns tokens
const getAccessToken = getBearerTokenProvider(
credential,
"https://cognitiveservices.azure.com/.default"
);
// Use with APIs that need bearer tokens
const token = await getAccessToken();
```
## Key Types
```typescript
import type {
TokenCredential,
AccessToken,
GetTokenOptions
} from "@azure/core-auth";
import {
DefaultAzureCredential,
DefaultAzureCredentialOptions,
ManagedIdentityCredential,
ClientSecretCredential,
ClientCertificateCredential,
InteractiveBrowserCredential,
ChainedTokenCredential,
AzureCliCredential,
AzurePowerShellCredential,
AzureDeveloperCliCredential,
DeviceCodeCredential,
AzureAuthorityHosts
} from "@azure/identity";
```
## Custom Credential Implementation
```typescript
import type { TokenCredential, AccessToken, GetTokenOptions } from "@azure/core-auth";
class CustomCredential implements TokenCredential {
async getToken(
scopes: string | string[],
options?: GetTokenOptions
): Promise<AccessToken | null> {
// Custom token acquisition logic
return {
token: "<access-token>",
expiresOnTimestamp: Date.now() + 3600000
};
}
}
```
## Debugging
```typescript
import { setLogLevel, AzureLogger } from "@azure/logger";
setLogLevel("verbose");
// Custom log handler
AzureLogger.log = (...args) => {
console.log("[Azure]", ...args);
};
```
## Best Practices
1. **Use `DefaultAzureCredential` for local development; use `ManagedIdentityCredential` or `WorkloadIdentityCredential` for production**
2. **Never hardcode credentials** - Use environment variables or managed identity
3. **Prefer managed identity** - No secrets to manage in production
4. **Scope credentials appropriately** - Use user-assigned identity for multi-tenant scenarios
5. **Handle token refresh** - Azure SDK handles this automatically
6. **Use ChainedTokenCredential** - For custom fallback scenarios
© Microsoft · MIT · microsoft/skills