【发布时间】: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