应该验证哪些第一令牌或参数?

时间:2018-12-11 10:57:31

标签: rest validation bearer-token

想象一下我的应用程序中有2条路由:

  • POST /login -> {token: some_token}
    返回访问第二个功能令牌的身份验证路由

  • POST /divide -> {result: x / y}
    模拟功能divide(x: int, y: int)的路由,该路由受令牌承载保护而不受第一条路由影响。同样在此函数中,我有一些验证器,即xy必须是整数,y必须不等于0并返回400:BadRequest,如果其中一个条件失败的话

所以,我的问题是,如果用户没有为路由/divide提供令牌承载和参数,我应该返回401还是400?

有两件事与我有关

  • 返回400:用户可以通过发送来了解我的API结构 空主体并解析响应,例如发送空主体并获取{x:必须提供,y: 必须提供},然后发送x = abc,y = bca并获取{x:必须为整数, y:必须为整数},等等...
  • return 401:用户可以通过发送很多消息来对我的应用程序进行DDoS 随机令牌,因此对于每个请求应用程序,应检查令牌是否有效

那种情况下的最佳做法是什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

好吧,这看起来像是“意见”问题,但我会回答。 您需要返回401,因为授权是您应该做的第一件事。只有用户可以访问资源,我们才能继续处理。

答案 1 :(得分:1)

未经授权,您绝对不应处理任何其他内容。否则,为什么还要进行身份验证/授权?如果您确实在未经授权的情况下处理内容,则基本上会违反安全性。显然,对于示例函数来说,这似乎并没有多大问题,但这就是要点。

所以您应该返回401。

在DDoS问题的情况下(通过以不同的顺序处理无法解决),您仍然必须检查所有令牌。即使您没有人也可以DDoS您的服务/ API。还有其他(API管理)解决方案,例如节流,白名单,限速等。