在我的ASP.NET MVC web应用程序中,我有一个外部单点登录,用于在企业中对用户进行集中身份验证。SSO应该返回一个唯一标识用户的“数据包”,然后用来传递给本地ASP.NET Owin身份验证(或者表单身份验证,或者类似的东西)。如果由于某种原因,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.");根据HTTP状态代码列表的说法,这500个错误中的一个可能是最合适的:
以数字"5“开头的响应状态代码表示服务器知道它遇到错误或无法执行请求的情况.
发布于 2016-05-02 19:12:08
错误代码401和错误代码403通常用于与认证相关的错误。然而,这些标准与这些标准一起,规定了何时以及如何使用这些标准。在您的例子中,这两种方法都不太适合。例如,403被描述为(http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html):
403禁止 服务器理解请求,但拒绝满足请求。授权于事无补,不应重复请求。如果请求方法不是HEAD,并且服务器希望公开请求未被满足的原因,则应该在实体中描述拒绝的原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404 (未找到)。
一个很好的选择是返回代码503 (服务不可用)。
503服务不可用 由于服务器临时超载或维护,服务器当前无法处理请求。这意味着这是一种暂时性的情况,经过一段时间的延迟后将得到缓解。
发布于 2016-05-02 20:34:44
验证客户端的错误应该在401以下:
401未经授权(RFC 7235)
类似于403禁止,但专门用于身份验证是必需的,并已失败或尚未提供。响应必须包括一个WWW-身份验证头字段,该字段包含适用于所请求资源的问题。参见基本访问身份验证和摘要访问身份验证。36 401语义上的意思是“未经身份验证”,即用户没有必要的凭据。注意:当一个IP地址被禁止进入网站(通常是网站域)并且拒绝允许访问某个网站时,一些站点会发出HTTP 401。
https://stackoverflow.com/questions/36989705
复制相似问题