AWS API Gateway Authorizer如何同时支持Cognito UserPool认证与公共访问
方案1:配置授权器为「可选」模式
这是最适配你当前单端点多操作场景的解决办法,AWS API Gateway(REST/HTTP API类型均支持)允许将绑定的JWT授权器设置为非强制校验:
- 如果你使用的是HTTP API:进入对应路由的授权配置页,关闭「授权必填」开关即可
- 如果你使用的是REST API:进入对应方法的「方法请求」配置页,将授权器对应的「Authorization Required」选项设置为
false
配置完成后生效逻辑如下:
- 请求携带有效JWT:授权器会正常解析Cognito用户信息(比如用户所属组、用户ID等),放入请求上下文传递给后端
- 请求未携带JWT/携带无效JWT:不会被网关拦截,会直接转发到你的后端服务,请求上下文不会包含授权相关字段。你可以在业务逻辑中根据请求body里的操作类型自行判断权限:
比如检测到当前是管理员操作,就校验请求上下文是否存在管理员用户组标识,不存在直接返回403;如果是公开操作则直接正常处理即可。
方案2:拆分路由(可选优化)
如果后续你的业务操作类型持续迭代,建议把公开操作和管理员操作拆分到两个独立路由:
- 公开路由不绑定任何授权器,所有请求默认可以访问
- 管理员路由绑定强制校验的JWT授权器,直接在网关层拦截未认证请求,不需要后端再做冗余校验
注意事项
- 可选授权器模式下必须在后端做好权限校验逻辑,避免未认证用户越权访问敏感操作
- 如果后端需要二次校验JWT签名,可以直接用Cognito User Pool公开的JWKS密钥校验,不需要自行维护密钥
内容的提问来源于stack exchange,提问作者Benjamin Sommer
相关产品推荐
相关产品推荐

