C#编写Cognito预认证触发器返回InvalidLambdaResponseException如何解决?
C# 实现Cognito预认证触发器的正确方案
错误原因
你当前使用的APIGatewayProxyRequest/APIGatewayProxyResponse是API网关触发Lambda时专用的输入输出类型,Cognito触发器有独立定义的事件结构,返回结构不匹配就会触发InvalidLambdaResponseException报错。
正确实现步骤
- 第一步:安装Cognito Lambda事件专用NuGet包
Install-Package Amazon.Lambda.CognitoIdentityProvider
- 第二步:替换输入输出类型为预认证触发器专属类型,参考代码如下:
using Amazon.Lambda.CognitoIdentityProvider.Events; using Amazon.Lambda.Core; using System; public class CognitoTriggers { public PreAuthenticationResponse PreAuthTrigger(PreAuthenticationRequest request, ILambdaContext context) { context.Logger.LogLine($"预认证触发器触发,用户ID:{request.UserName}"); // 此处可添加自定义校验逻辑,比如判断用户是否在允许名单内、账号状态是否正常 // 如果要拒绝认证,直接抛出异常即可,Cognito会自动返回错误给客户端 /* if (校验不通过的条件) { throw new Exception("当前账号暂无登录权限"); } */ // 校验通过直接返回响应对象即可,不需要自定义状态码 return new PreAuthenticationResponse(); } }
额外说明
- 所有Cognito触发器都有对应的专属输入输出类型,比如预注册触发器用
PreSignUpRequest/PreSignUpResponse,后置认证触发器用PostAuthenticationRequest/PostAuthenticationResponse,都在Amazon.Lambda.CognitoIdentityProvider.Events命名空间下。 - 触发器逻辑执行完成后无需额外配置返回字段,只要返回对应类型的实例,Cognito就会判定校验通过。
内容的提问来源于stack exchange,提问作者Mikołaj Waśniewski
相关产品推荐
相关产品推荐

