问题
应用程序希望客户端Authorization
在大多数路由上发送带有访问令牌的标头。现在有一个新功能,一些新的少数路由不仅需要请求Authorization
头,还需要pin
请求正文中包含 6 长度字符串的属性。如果该pin
值与用户存储在数据库中的值不匹配pin
,则应拒绝该请求。
由于用户已通过身份验证(它在标头中发送了有效的访问令牌Authorization
)但发送了错误的值,应该使用哪个状态代码来拒绝请求pin
?
语境
此应用程序现在将支持支付,并且在请求正文中需要该pin
属性的路由是进行支付的路由,因此它们在应用程序内花费用户的积分。这就是为什么它只需要pin
在几条路线上发送。
我认为的解决方案
- 由于正文
422 Unprocessable Entity
中的值错误,无法处理请求,因此请使用。pin
- 问题:当其他一些验证失败时也会发送状态码
422
,所以看起来不正确,因为它pin
与授权更相关。
- 问题:当其他一些验证失败时也会发送状态码
- 使用
401 Not Authorized
错误pin
值意味着用户未能提供所有正确的凭据。- 问题:到目前为止,用户实际上为应用程序在每条路由上所期望的内容提供了正确的凭据。在新功能之后,被视为在应用程序中进行身份验证所需的凭据将不匹配。现在
401
将意味着两种错误,而不是仅对用户进行身份验证。
- 问题:到目前为止,用户实际上为应用程序在每条路由上所期望的内容提供了正确的凭据。在新功能之后,被视为在应用程序中进行身份验证所需的凭据将不匹配。现在
- 使用
403 Forbidden
.- 问题:虽然用户是不允许的,但这不是角色权限的问题。
pin
额外的问题:在标头而不是正文中发送是否更好?