wso2 - 为什么 WSO2 API 管理器返回带有错误令牌的 http 代码 500 而不是 401
问题描述
我注意到WSO2 API Manager
(4.0.0 版)在调用错误或过期令牌的情况下返回 http 状态 500。响应类似于:
{
"code": "900900",
"message": "Unclassified Authentication Failure",
"description": "Access failure for API: /pizzashack/1.0.0, version: 1.0.0 status: (900900) - Unclassified Authentication Failure"
}
根据rfc7235,http状态 401 意味着:
401(未授权)状态码表示该请求尚未应用,因为它缺少目标资源的有效身份验证凭据。生成 401 响应的服务器必须发送一个 WWW-Authenticate 头字段(第 4.1 节),其中包含至少一个适用于目标资源的质询。
如果请求包含身份验证凭据,则 401 响应表明已拒绝对这些凭据进行授权。用户代理可以使用新的或替换的授权头字段重复请求(第 4.2 节)。如果 401 响应包含与先前响应相同的质询,并且用户代理已经尝试了至少一次身份验证,那么用户代理应该向用户呈现封闭的表示,因为它通常包含相关的诊断信息。
同时,根据rfc7231,http状态 500 意味着:
500(内部服务器错误)状态代码表示服务器遇到了阻止它完成请求的意外情况。
因此,对于 api manager(作为服务器)而言,500 确实表明服务器无法处理错误或过期的令牌;但是对于调用者(用户代理),恐怕401更合理,因为它清楚地告诉用户代理令牌有问题(丢失,错误,过期等)
请问在这种情况下是否有任何解决方案可以使api管理器返回401?
解决方案
推荐阅读
- date - 如何编写自定义 WordPress 搜索以通过自定义帖子类型、自定义分类和选定日期获取结果?
- ffmpeg - ffmpeg:复制/调整大小时如何保留输入元数据
- php - 在php中随机一个数字从10到100
- java - 错误:10 [1.1、1.2、1.3、1.4、1.5、1.6] 线程“main”java.lang.ArrayIndexOutOfBoundsException 中的异常:数组索引超出范围:ja 处为 0
- python - 使用 AWS Systems Manager 执行脚本时 EC2 pip 安装未注册
- c# - 如何在 C# 后面的代码中读取 Xamarin Xaml x:Name?
- vue.js - $refs 在 vue js 中返回 undefined
- python-3.x - 提高 pandas 的迭代、子集和合并性能
- javascript - 使用 chrome 扩展创建文件夹
- python - Tkinter 名称错误