跳转至

Teams 机器人的联合身份验证,以及它与客户端密钥的比较

联合身份验证(证书与托管身份)

在生产环境中,OpenClaw 支持通过 channels.msteams.authType: "federated" 使用联合身份验证作为客户端密钥的替代方案。有两种方法:

选项 A:基于证书的身份验证

使用已注册到 Entra ID 应用注册的 PEM 证书。

设置:

  1. 生成或获取一个证书(PEM 格式,包含私钥)。
  2. Entra ID → 应用注册 → 证书和密钥 → 证书 → 上传公钥证书。

配置:

{
  channels: {
    msteams: {
      enabled: true,
      appId: "<APP_ID>",
      tenantId: "<TENANT_ID>",
      authType: "federated",
      certificatePath: "/path/to/cert.pem",
      webhook: { path: "/api/messages" },
    },
  },
}

环境变量:

  • MSTEAMS_AUTH_TYPE=federated
  • MSTEAMS_CERTIFICATE_PATH=/path/to/cert.pem

选项 B:Azure 托管身份

在 Azure 基础设施(AKS、App Service、Azure 虚拟机)上使用 Azure 托管身份实现无密码身份验证。

工作原理:

  1. 机器人 pod/VM 具有托管身份(系统分配或用户分配)。
  2. 联合身份凭据将托管身份与 Entra ID 应用注册关联。
  3. 运行时,OpenClaw 使用 @azure/identity 从 Azure IMDS 端点获取令牌。
  4. 该令牌会传递给 Teams SDK 用于机器人身份验证。

先决条件:

  • 已启用托管身份的 Azure 基础设施(AKS 工作负载身份、App Service、VM)。
  • 已在 Entra ID 应用注册上创建联合身份凭据。
  • pod/VM 到 IMDS(169.254.169.254:80)的网络访问。

配置(系统分配的托管身份):

{
  channels: {
    msteams: {
      enabled: true,
      appId: "<APP_ID>",
      tenantId: "<TENANT_ID>",
      authType: "federated",
      useManagedIdentity: true,
      webhook: { path: "/api/messages" },
    },
  },
}

配置(用户分配的托管身份): 在上述代码块中添加 managedIdentityClientId: "<MI_CLIENT_ID>"。

环境变量:

  • MSTEAMS_AUTH_TYPE=federated
  • MSTEAMS_USE_MANAGED_IDENTITY=true
  • MSTEAMS_MANAGED_IDENTITY_CLIENT_ID=<client-id>(仅用户分配)

AKS 工作负载身份配置

对于使用工作负载身份的 AKS 部署:

  1. 在 AKS 集群上启用工作负载身份。
  2. 在 Entra ID 应用注册上创建联合身份凭据:
az ad app federated-credential create --id <APP_OBJECT_ID> --parameters '{
  "name": "my-bot-workload-identity",
  "issuer": "<AKS_OIDC_ISSUER_URL>",
  "subject": "system:serviceaccount:<NAMESPACE>:<SERVICE_ACCOUNT>",
  "audiences": ["api://AzureADTokenExchange"]
}'
  1. 使用应用客户端 ID 注释 Kubernetes 服务账户:
apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-bot-sa
  annotations:
    azure.workload.identity/client-id: "<APP_CLIENT_ID>"
  1. 为 pod 添加标签以进行工作负载身份注入:
metadata:
  labels:
    azure.workload.identity/use: "true"
  1. 允许网络访问 IMDS(169.254.169.254):如果使用 NetworkPolicy,请为端口 80 上的 169.254.169.254/32 添加一条出站规则。

身份验证类型比较

方法 配置 优点 缺点
客户端密钥 appPassword 设置简单 需要轮换密钥,安全性较低
证书 authType: "federated" + certificatePath 网络上无共享密钥 证书管理开销
托管身份 authType: "federated" + useManagedIdentity 无密码,无需管理密钥 需要 Azure 基础设施

certificateThumbprint 可以与 certificatePath 一起设置,但身份验证路径不会读取它;仅为前向兼容而接受。

默认: 当 authType 未设置时,OpenClaw 使用客户端密钥身份验证(appPassword)。现有配置保持不变并继续有效。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw