【发布时间】:2016-05-02 19:01:24
【问题描述】:
在我的 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”开头的响应状态代码表示服务器知道它遇到错误或无法执行请求的情况......
【问题讨论】:
-
401 Unauthorized..... -
一开始我也是这么想的,但是这会导致重定向到“登录”页面,这是错误开始的地方,所以我们最终陷入了无限循环。跨度>
-
500 适用于服务器因处理而出现服务器端问题时。 401 是您在未经身份验证的情况下尝试访问安全资源时得到的结果,因此在这种情况下可能是合适的,以避免您可以执行 400 的循环。
-
“数据包不包含最低要求信息”有什么原因?通过回答该问题,您可以确定正确的状态代码。
-
此时数据包丢失最少信息的原因在技术上是未知的。用户可能已经通过 SSO 进行了身份验证,这并不关心我的应用程序需要的“最少信息”。一旦重定向回 NET 应用程序,它就会检查这个数据包,如果不满足我的应用程序的要求,它应该做出适当的响应。同样,SSO 应该包含所有这些信息,但由于它是一个外部资源,它超出了本地应用程序的控制范围,并且可能会出现问题。
标签: c# asp.net-mvc authentication http-status-codes