Teams 机器人的联合身份验证,以及它与客户端密钥的比较¶
联合身份验证(证书与托管身份)¶
在生产环境中,OpenClaw 支持通过 channels.msteams.authType: "federated" 使用联合身份验证作为客户端密钥的替代方案。有两种方法:
选项 A:基于证书的身份验证¶
使用已注册到 Entra ID 应用注册的 PEM 证书。
设置:
- 生成或获取一个证书(PEM 格式,包含私钥)。
- 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=federatedMSTEAMS_CERTIFICATE_PATH=/path/to/cert.pem
选项 B:Azure 托管身份¶
在 Azure 基础设施(AKS、App Service、Azure 虚拟机)上使用 Azure 托管身份实现无密码身份验证。
工作原理:
- 机器人 pod/VM 具有托管身份(系统分配或用户分配)。
- 联合身份凭据将托管身份与 Entra ID 应用注册关联。
- 运行时,OpenClaw 使用
@azure/identity从 Azure IMDS 端点获取令牌。 - 该令牌会传递给 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=federatedMSTEAMS_USE_MANAGED_IDENTITY=trueMSTEAMS_MANAGED_IDENTITY_CLIENT_ID=<client-id>(仅用户分配)
AKS 工作负载身份配置¶
对于使用工作负载身份的 AKS 部署:
- 在 AKS 集群上启用工作负载身份。
- 在 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"]
}'
- 使用应用客户端 ID 注释 Kubernetes 服务账户:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-bot-sa
annotations:
azure.workload.identity/client-id: "<APP_CLIENT_ID>"
- 为 pod 添加标签以进行工作负载身份注入:
- 允许网络访问 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