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

.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而非整个请求对象,可以自定义参数绑定属性:

  1. 创建自定义参数绑定类:
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));
    }
}
  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:15:03