SuperAPI AI 工具集

cometchat-angular-v5-production

安全与审计

查看项目

更新于 10-21 20:28

技能介绍

用途

本技能面向 CometChat Angular UI Kit v5(已验证 5.1.0–5.2.0)的生产环境加固,帮助开发者从开发配置迁移到可安全发布的上线配置。适用场景包括:正式上线、安全审查,或判断当前集成是否“可以安全发布”。

核心原则

最重要的一点:绝不要在浏览器包中携带 Auth Key。Auth Key 可以为应用中的任意用户铸造会话;而 environment.ts 中的内容会被编译进用户下载的 JavaScript,因此放在其中的 Auth Key 等同于公开。任何人都能读取它、以任意 UID 登录并读取所有会话。

开发与生产的差异:

  • 登录方式:开发用 CometChatUIKit.login(uid),生产用 CometChatUIKit.loginWithAuthToken(token)。
  • Auth Key:开发放在 environment.ts,生产必须从包中移除。
  • Token 来源:生产由你的后端按已认证用户铸造。
  • REST API Key:始终只在服务端使用,绝不放在客户端。

生产登录流程

  1. 你的应用先完成用户认证(CometChat 不是身份提供方)。
  2. 你的服务器使用 REST API Key 调用 CometChat REST API,为该用户的 UID 铸造 auth token。
  3. 服务器通过已认证的请求把 token 返回给浏览器。
  4. 应用调用 loginWithAuthToken(token)。

示例代码:

import { inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { firstValueFrom } from 'rxjs';
import { CometChatUIKit } from '@cometchat/chat-uikit-angular';

const http = inject(HttpClient);

async function loginForCurrentUser() {
  // your endpoint, protected by your own session
  const { authToken } = await firstValueFrom(
    http.get<{ authToken: string }>('/api/cometchat-token', { withCredentials: true }),
  );
  return CometChatUIKit.loginWithAuthToken(authToken);
}

该端点必须从服务端会话中推导 UID,绝不能从请求参数获取。接受 ?uid= 会让任何调用者冒充任何人。

环境文件

// src/environments/environment.prod.ts
export const environment = {
  production: true,
  cometchat: { appId: 'APP_ID', region: 'REGION', authKey: '' },   // empty on purpose
};

App ID 和 Region 不是密钥,它们用于标识应用。Auth Key 才是密钥,此处留空。确认生产配置中已接好 fileReplacements,然后对构建产物做 grep 以确认:

ng build --configuration production && grep -r "YOUR_AUTH_KEY" dist/ || echo "clean"

在 CI 中运行该命令。fileReplacements 配置错误会静默失败并发布开发文件。

上线前还应处理

  • 用户在服务端创建,作为注册流程的一部分,而不是从浏览器创建。
  • 正确登出:await CometChatUIKit.logout(),然后清理派生状态并注销推送 token(参见 cometchat-angular-v5-push)。
  • 全站 HTTPS——通话(getUserMedia)和推送都要求 HTTPS。
  • 将 kit 固定到精确或 ~ 版本范围,避免次版本在你不知情时改变组件行为。
  • 设置日志级别:CometChatUIKit.setLogLevel(...),生产环境更安静。
  • 可见地处理错误:除 <cometchat-call-logs> 外,每个列表都有 (error) 输出——已对照 5.1.0 验证,它只有 itemClick 和 callButtonClicked 两个输出;它接受 onError 输入回调,因此在那里绑定 (error) 只会绑定一个永不触发的 DOM 监听器。Conversations / Users / Groups / GroupMembers / MessageList 都有 (error);用 <cometchat-error-boundary> 包裹界面。
  • 清理:每个订阅和监听器都要在 ngOnDestroy 中处理;在长生命周期 SPA 中泄漏更严重。
  • Region 必须与仪表盘应用一致,且在每个构建配置中都一致。

上线前检查清单

  • 生产包中不含 Auth Key(在 CI 中 grep 验证)
  • 生产使用 loginWithAuthToken;UID 来自服务端会话
  • REST API Key 仅在服务端
  • fileReplacements 通过构建验证,而不是读配置——注意生产构建在默认 1 MB 预算下会失败,直到你调高它(参见 cometchat-angular-v5-core Install);否则下面的 grep 永远不会运行
  • HTTPS 与有效证书
  • 登出清理会话、状态和推送 token
  • kit 版本已固定
  • 错误边界与错误输出已处理
  • 生产应用(而非仅开发应用)已启用仪表盘扩展/AI
  • 已用生产应用的凭据测试

常见陷阱

  • 生产包中出现 Auth Key——最关键的一项。
  • Token 端点信任客户端提供的 UID——导致冒充。
  • 假设 fileReplacements 生效而未验证——发布开发配置。
  • 只在开发应用上配置仪表盘——生产环境功能静默缺失。
  • 没有登出清理——下一个用户继承会话或推送 token。

验证方式

生产构建不含 Auth Key · 通过 token 登录成功 · 被篡改的 UID 被服务端拒绝 · 登出完全清理 · 通话和推送在 HTTPS 下工作 · 生产应用已启用相关功能。

配套技能

  • cometchat-angular-v5-core:references/setup-credentials.md 覆盖了本技能所替代的开发凭据流程。
  • cometchat-security:本客户端加固所接入的企业认证模型——将你的 IdP / SSO 接入 token 流程(你的 IdP → 你的服务器 → 铸造 CometChat auth token;CometChat 不是 IdP)、token 过期/刷新与重新登录、RBAC 角色与群组(SBAC)范围,以及 Auth Key、auth token 与 REST API Key 的区别。进行安全审查或涉及 SSO 问题时加载它。

限制

Angular UI Kit 文档没有专门的生产加固页面;上述检查清单是本技能包自身的指导,源自 RULES.md §4 中的凭据规则以及 kit 实际提供的内容,并已如此标注,而非作为文档内容呈现。这应被视为一个已记录的文档缺口(DOCS GAP)。