首页 > 解决方案 > 为什么 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?

标签: wso2wso2-amwso2-appm

解决方案


推荐阅读