在我的ASP.NET MVC Web应用程序中,我有一个外部单点登录,用于在企业中集中验证用户。 SSO应该返回一个"数据包"标识用户唯一的东西,然后用于传递给本地ASP.NET Owin Cookie身份验证(或者表单身份验证,或类似的东西)。如果出于某种原因,SSO提供的"数据包"的东西没有包含最低要求的信息,我想在适当的本地ASP.NET级别处理它。这是一个非常严重的错误,并不一定是通常会发生的事情。所以我想我会做这样的事情:
public class AuthController() : Controller
{
public ActionResult Login(string returnUrl)
{
// Process external single-sign-on authentication
bool isSuccess = ProcessExternalAuth();
if (!success)
// return appropriate HTTP status code
else
// continue with login
}
}
但我不确定要返回哪个HTTP状态代码。这样的事情会合适吗?
return new HttpStatusCodeResult(
HttpStatusCode.BadGateway, "SSO authentication failed.");
根据List of HTTP Status Codes,500错误中的一个可能是最合适的:
以数字" 5"开头的响应状态代码表示服务器知道它遇到错误或无法执行请求的情况......
答案 0 :(得分:0)
错误代码401和错误代码403通常用于与身份验证相关的错误。然而,它们有一些与它们一起的标准,它们规定了何时以及如何使用它们。在你的例子中,这些都不合适。例如,403被描述为(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html):
403 Forbidden
服务器理解请求,但拒绝履行请求。授权无效,请求不应重复。如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到)。
一个很好的选择是返回代码503(服务不可用)。
503服务不可用
由于服务器临时过载或维护,服务器当前无法处理请求。 这意味着这是一个暂时的情况,经过一段时间后会缓解。
答案 1 :(得分:0)
验证客户端的错误应该在401下:
类似于403 Forbidden,但专门用于需要身份验证且失败或尚未提供时。响应必须包含WWW-Authenticate头字段,其中包含适用于所请求资源的质询。请参阅基本访问身份验证和摘要访问身份验证。[36] 401在语义上表示"未经身份验证",即用户没有必要的凭证。 注意:某些站点在从网站(通常是网站域)禁止IP地址时发出HTTP 401,并且该特定地址被拒绝访问网站的权限。
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_Client_Error