公共API如何区分经过身份验证的用户与匿名用户

时间:2017-08-02 14:10:04

标签: amazon-web-services authentication aws-lambda

假设我有一个AWS Lambda和一个相关的API网关端点API(例如/user/{userid}/activities)。

可以从经过身份验证的用户和未经身份验证的用户调用此API,并且基于此,行为也不同。

经过身份验证的用户是拥有有效JWT的用户。未经身份验证的用户,没有JWT或他们的JWT已过期或无效。

此JWT由自定义授权人验证,该授权人根据令牌的签名公钥和其他参数(过期日期,发行者等)进行验证。

/user/{userid}/activities相关的lambda需要知道自定义授权者是否已经验证(或不验证)相关调用,因此可以选择应该使用的行为。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

方法取决于您区分匿名用户和经过身份验证的用户的方式。

鉴于您未在未指定授权标头时识别匿名用户,AWS APIGateway授权人将始终拒绝访问,因为标头丢失。

您可以考虑以下选项:

  1. 始终使用令牌(对于匿名/经过身份验证的用户)。
  2. 将授权逻辑移至lambda包装器(因此您不会为这些端点使用自定义授权程序)。
  3. 通过路由器代理,这样您就有机会在缺少时添加授权标头(没有客户端更改,服务器为匿名用户添加预定义标记)。
  4. 无论哪种方式,您都需要将端点签名更改为:/user/activities并从上下文中推断userId,上下文可以通过授权者的适当userId帖子验证进行更新。