【发布时间】:2016-08-19 20:29:18
【问题描述】:
我正在设计一个 POST Restful API,在这种情况下,我必须根据请求正文中提供的元素之一授权用户。 例如。
{
division : "1",
name : "MyName",
address:{
no : 123,
street : "abc",
pincode : 222111
}
....
}
所以发出 POST 请求的用户应该被授权在第 1 部门工作。我无法在没有获取请求正文的情况下授权用户。
还要验证一些属性,我必须在 DB 中进行大量的 DB 调用,例如,检查上述地址是否具有有效的 pincode 值。
所以我的问题是我应该如何将错误代码返回给用户 -
- [编辑]如果请求中的除法无效(系统中不存在的东西) - 400 或 403?
- 如果提供了划分,但用户未经授权且密码无效 - 400 表示无效密码或 403?
- 如果 pincode 是必需属性且请求中未提供,则错误代码应该是什么。我应该先检查 403 再检查 400 还是反过来?
基本上哪个错误代码继续另一个?
也可以这样做:
400 – request is bad, syntactically (division/pincode or other mandatory values not provided)
403 – authorize user
400 – request is bad, data specific validation (heavier operation, requiring to hit DB)
[编辑] 我们不希望使用 422 错误代码
【问题讨论】:
-
请不要依赖用户告诉你他们被授权做什么! POST 请求非常容易查看和编辑;有人告诉你他们可以做任何他们想做的事,这是微不足道的。用户应该表明自己的身份,并且你告诉他们他们可以做什么。
-
${personalDeity}!请原谅我,但我对您的应用程序知之甚少,这表明您对安全性一无所知。 请不要自己实现授权和身份验证例程。鉴于您展示的知识,您将惨败。使用经过验证的框架,例如 Apache Shiro 或 Spring Security。
标签: web-services rest