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

AWS API Gateway中WebSocket API自定义Lambda授权器返回内容说明

WebSocket自定义Lambda授权器返回格式说明

WebSocket API的自定义Lambda授权器和HTTP API的返回格式完全不同,它要求返回符合IAM策略规范的文档,同时可附加上下文数据,这是因为WebSocket API沿用了REST API的授权器架构设计。

核心返回结构

必须包含以下顶级字段:

  • principalId: 标识授权用户的唯一ID(可以是任意字符串,比如用户ID、UUID)
  • policyDocument: IAM风格的策略,明确指定允许或拒绝的请求操作
  • context(可选): 传递给后端处理Lambda的自定义上下文数据

完整代码示例

function customWebSocketLambdaAuthorizer(event) {
  const isValid = validate(event);
  const principalId = "user-123"; // 替换为实际业务中的用户标识

  // 构建符合要求的IAM策略文档
  const policyDocument = {
    Version: "2012-10-17", // 固定版本号,不可修改
    Statement: [
      {
        Action: "execute-api:Invoke", // 固定动作值
        Effect: isValid ? "Allow" : "Deny", // 授权结果,Allow为通过,Deny为拒绝
        Resource: event.methodArn // 直接使用事件中传入的当前请求ARN
      }
    ]
  };

  const result = {
    principalId,
    policyDocument,
    context: {
      message: "User authenticated",
      userId: principalId
    }
  };

  return result;
}

关键细节解释

  • event.methodArn: API Gateway触发授权器时,会自动把当前请求的资源ARN传入event,直接用这个值作为策略的Resource即可,无需手动拼接
  • Effect: 只能是Allow或Deny,对应授权是否通过
  • Version: 固定为2012-10-17,这是IAM策略的标准版本号
  • context: 会被透传到后续处理该WebSocket连接的Lambda函数中,可通过event.requestContext.authorizer访问这些数据

和HTTP API授权器的核心差异

HTTP API授权器做了简化,直接返回isAuthorized布尔值就能完成授权判断,但WebSocket API仍保留了传统REST API授权器的IAM策略模式,这是两者不能通用的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:02:33