【问题标题】:JWT authentication for public resources公共资源的 JWT 认证
【发布时间】:2021-11-12 06:13:27
【问题描述】:

我尝试检查服务器中间件区域中的 JWT 访问令牌

如果 JWT 令牌已过期且资源仅供授权用户使用,则返回 401 代码

但是如果用户使用 JWT 令牌请求公共资源(授予匿名用户),我应该在令牌过期时返回 401 代码吗?

我如何通知用户他们的令牌无效?

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: oauth-2.0 jwt


【解决方案1】:

公共资源不需要保护,因此您应该确保您的服务器中间件不会针对这些请求运行,并且无论是否发送了有效的 JWT,您都会返回带有 200 状态码的资源。

这通常通过采用如下路径约定来完成。如果资源是公开的,您将不会在意黑客是否访问它们。

/public/docs
/public/news

我见过人们以基本的方式保护公共资源,例如通过固定的 API 密钥来限制拒绝服务的风险,尽管我通常不建议这样做。值得一提的是,在这种情况下,这些路径将使用不同的服务器中间件。

对于安全端点,正确验证 JWT 并遵循Best Practices

  • 使用库来验证签名、到期、颁发者和受众
  • 如果其中任何一个失败,则返回 401 状态
  • 然后使用范围和声明进行业务授权检查 - 例如检查用户是否被允许访问请求的实际数据
  • 如果业务授权失败,返回 403(或 404 - 未找到用户)状态

【讨论】:

  • 谢谢!我没有使用“/public/”或“/restricted/”路由。我将“/”用于受限数据并从该基本路由公共路由(/sign_in、sign_up 等)中排除。这样,URL 看起来就更漂亮了。并且当将数据类型从公共更改为受限时,我不必更改 URL
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 2014-06-07
  • 2020-12-02
  • 2019-08-09
相关资源
最近更新 更多