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



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

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

经过身份验证的用户是拥有有效 JWT 的用户。未经身份验证的用户,是否具有 JWT 或其 JWT 已过期或无效。

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

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

我该怎么做?

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

假设您希望在未指定授权标头时标识匿名用户,AWS APIGateway 授权方将始终拒绝访问,因为缺少标头。

您可以考虑以下选项:

  1. 始终使用令牌(对于匿名/经过身份验证的用户(。
  2. 将授权逻辑移动到 lambda 包装器(这样您就不会对这些终端节点使用自定义授权方(。
  3. 通过路由器代理,因此您有机会在缺少授权标头时添加授权标头(由于没有客户端更改,服务器为匿名用户添加预定义的令牌(。

无论哪种方式,您都需要将端点签名更改为以下内容:/user/activities并从上下文推断 userId,授权方可以在验证后使用适当的 userId 更新上下文。

相关内容

最新更新