【问题标题】:How do I get AWS to return a status code showing that the JWT used for authorization has expired?如何让 AWS 返回显示用于授权的 JWT 已过期的状态代码?
【发布时间】:2019-09-06 14:03:40
【问题描述】:

我正在使用 AWS 的无服务器框架来开发基于 API Gateway / Lambda 的 web 应用程序。我正在使用 JWT 进行身份验证和授权,编写了一个自定义授权器,该授权器通过无服务器连接到 API Gateway 配置。

我在登录时的策略是发出一个有效期为 60 分钟的“访问”令牌,以及一个有效期为 8 天的“刷新”令牌。如果用户在访问令牌发出超过 60 分钟后尝试访问系统,客户端应用程序将调用由刷新令牌认证的 refresh_token API(这是此刷新令牌允许的唯一 API),以获取新的一对令牌。因此,如果用户处于休眠状态超过 8 天,则只需要重新输入用户名/密码详细信息,否则他们会不断刷新令牌,如果它们已被列入黑名单,则每 60 分钟让系统有机会将其启动.

这个策略工作得很好,除了我只能找到如何根据解析 JWT 来接受或拒绝对 API 的访问 - 不能将特定的状态代码回传给客户端(“令牌已过期 - 你需要刷新”之类的东西)。

所以在我的module.exports.user = (event, context, callback) => {} 函数中我是callback('user','Deny',methodArn) 但这并没有向客户端提供任何关于用户请求被拒绝的线索。

但是,值得注意的是,对于这种情况没有标准的 HTTP 状态代码 - 只有通用的 401。那么有没有更好的方法来解决这个问题,我是不是走错了路?

【问题讨论】:

  • 我是个白痴。刚刚意识到我可以在客户端查看 JWT 以查看它是否已过期,如果已过期,请刷新它。无需浪费时间前往服务器并尝试找出它被拒绝的原因。

标签: amazon-web-services jwt authorization


【解决方案1】:

请参阅我对原始问题的评论。意识到我可以在客户端检查过期并直接进行刷新,而不是尝试使用它进行服务器身份验证,但失败了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2016-11-18
    相关资源
    最近更新 更多