.NET中AWS Annotations Framework如何获取API Gateway的JWT Claims
在.NET AWS Annotations Framework中获取API Gateway的JWT Claims
解决方法
要在AWS Annotations Framework中获取API Gateway传递的JWT Claims,可通过以下两种方式实现:
方式一:直接注入APIGatewayHttpApiV2ProxyRequest参数
Annotations框架并未限制你使用原始请求对象,直接将APIGatewayHttpApiV2ProxyRequest作为方法参数注入,就能沿用之前的逻辑获取Claims:
[LambdaFunction] [HttpApi(LambdaHttpMethod.Get, "/add/{x}/{y}")] public int Add(int x, int y, APIGatewayHttpApiV2ProxyRequest request, ILambdaContext context) { var email = request.RequestContext.Authorizer.Jwt.Claims["EmailID"]; // 执行业务逻辑 return x + y; }
方式二:自定义FromClaim属性实现优雅绑定
如果希望直接获取指定Claim而非整个请求对象,可以自定义参数绑定属性:
- 创建自定义参数绑定类:
public class FromClaimAttribute : Attribute, IParameterSource { private readonly string _claimName; public FromClaimAttribute(string claimName) { _claimName = claimName; } public Task<object> GetValueAsync(ParameterInfo parameter, ILambdaContext context, InvokeRequest invokeRequest) { var request = JsonSerializer.Deserialize<APIGatewayHttpApiV2ProxyRequest>(invokeRequest.Payload); request.RequestContext.Authorizer.Jwt.Claims.TryGetValue(_claimName, out var claimValue); return Task.FromResult(Convert.ChangeType(claimValue, parameter.ParameterType)); } }
- 在Lambda方法中直接使用该属性:
[LambdaFunction] [HttpApi(LambdaHttpMethod.Get, "/add/{x}/{y}")] public int Add(int x, int y, [FromClaim("EmailID")] string email, ILambdaContext context) { // 直接使用email参数 return x + y; }
补充说明
[FromHeader]属性仅用于获取HTTP请求头内容,和JWT Claims无关联,无法通过它获取Claims。- 需确保API Gateway已正确配置JWT授权器,且Claims已被正确传递至Lambda的请求上下文。
内容的提问来源于stack exchange,提问作者danwag
相关产品推荐
相关产品推荐

