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
相关产品推荐
相关产品推荐

