You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET容器中传递临时Azure开发测试凭证的方案咨询

解决方案:.NET F#容器化开发阶段访问Azure Key Vault的凭证处理

问题1:寻找同时包含.NET ASP.NET运行时和Azure CLI的容器镜像

官方没有现成的组合镜像,但可以通过两种方式快速构建:

方式1:在ASP.NET镜像基础上安装Azure CLI

直接基于mcr.microsoft.com/dotnet/aspnet镜像,添加Azure CLI的安装步骤,Dockerfile示例:

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app

# 安装Azure CLI
RUN apt-get update && apt-get install -y curl apt-transport-https lsb-release gnupg \
    && curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null \
    && AZ_REPO=$(lsb_release -cs) \
    && echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | tee /etc/apt/sources.list.d/azure-cli.list \
    && apt-get update && apt-get install -y azure-cli \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

方式2:多阶段构建复用Azure CLI镜像内容

如果不想在ASP.NET镜像里安装冗余依赖,可用多阶段构建从Azure CLI镜像复制必要文件:

FROM mcr.microsoft.com/azure-cli:latest AS cli
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base

# 复制Azure CLI的二进制文件和依赖
COPY --from=cli /usr/local/azure-cli /usr/local/azure-cli
COPY --from=cli /usr/bin/az /usr/bin/az
ENV PATH="/usr/local/azure-cli/bin:${PATH}"

问题2:本地开发凭证传入容器及TokenCredential创建

方案A:挂载本地Azure CLI凭证目录

DefaultAzureCredentials会自动读取Azure CLI缓存的凭证,只需将本地的.azure目录挂载到容器内对应路径:

docker run -v ~/.azure:/root/.azure your-fsharp-app-image

容器内的DefaultAzureCredentials会自动识别并使用本地已登录的Azure CLI凭证,无需修改代码。

方案B:自定义TokenCredential包装已有AccessToken

如果已经通过本地获取了AccessToken,可自定义TokenCredential实现来包装它:

open Azure.Core

type StaticTokenCredential(token: AccessToken) =
    inherit TokenCredential()
    override this.GetTokenAsync(requestContext: TokenRequestContext, cancellationToken: System.Threading.CancellationToken) =
        System.Threading.Tasks.Task.FromResult(token)
    override this.GetToken(requestContext: TokenRequestContext, cancellationToken: System.Threading.CancellationToken) =
        token

// 使用示例
let accessToken = // 从本地获取的AccessToken实例
let credential = StaticTokenCredential(accessToken)
let keyVaultClient = Azure.Security.KeyVault.Secrets.SecretClient(Uri "https://your-vault.vault.azure.net/", credential)

方案C:传入服务主体凭证作为环境变量

创建测试用Azure AD服务主体,将其凭证通过环境变量传入容器:

docker run \
  -e AZURE_CLIENT_ID="your-client-id" \
  -e AZURE_CLIENT_SECRET="your-client-secret" \
  -e AZURE_TENANT_ID="your-tenant-id" \
  your-fsharp-app-image

DefaultAzureCredentials会自动拾取这些环境变量,无需额外代码改动。

其他预发布测试方案

  • 使用Azure AD用户凭证:通过环境变量AZURE_USERNAME和AZURE_PASSWORD传入测试用户的账号密码,DefaultAzureCredentials会自动用这些凭证认证(仅用于测试,生产环境禁用)。
  • 复用VS/VS Code凭证:如果开发机器已通过VS/VS Code登录Azure,可挂载对应凭证目录(Windows为%APPDATA%\.IdentityService,macOS为~/Library/Application Support/IdentityService)到容器内对应路径,DefaultAzureCredentials会自动识别。

内容的提问来源于stack exchange,提问作者Squaven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:52:33