【问题标题】:Public API how to discriminate authenticated user vs anonymous user公共 API 如何区分经过身份验证的用户和匿名用户
【发布时间】:2017-08-21 10:39:34
【问题描述】:

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

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

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

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

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

我该怎么做?

【问题讨论】:

  • 您使用 aws Cognito 吗?如果是这样,则支持经过身份验证和未经身份验证的身份,其中为这两个身份颁发令牌

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


【解决方案1】:

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

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

您可以考虑以下选项:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-20
    • 2018-12-16
    • 2023-03-28
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多