想象一下我的应用程序中有2条路由:
POST /login -> {token: some_token}
返回访问第二个功能令牌的身份验证路由
POST /divide -> {result: x / y}
模拟功能divide(x: int, y: int)
的路由,该路由受令牌承载保护而不受第一条路由影响。同样在此函数中,我有一些验证器,即x
和y
必须是整数,y
必须不等于0并返回400:BadRequest,如果其中一个条件失败的话
所以,我的问题是,如果用户没有为路由/divide
提供令牌承载和参数,我应该返回401还是400?
有两件事与我有关
那种情况下的最佳做法是什么?
谢谢。
答案 0 :(得分:1)
好吧,这看起来像是“意见”问题,但我会回答。 您需要返回401,因为授权是您应该做的第一件事。只有用户可以访问资源,我们才能继续处理。
答案 1 :(得分:1)
未经授权,您绝对不应处理任何其他内容。否则,为什么还要进行身份验证/授权?如果您确实在未经授权的情况下处理内容,则基本上会违反安全性。显然,对于示例函数来说,这似乎并没有多大问题,但这就是要点。
所以您应该返回401。
在DDoS问题的情况下(通过以不同的顺序处理无法解决),您仍然必须检查所有令牌。即使您没有人也可以DDoS您的服务/ API。还有其他(API管理)解决方案,例如节流,白名单,限速等。