我正在asp.net mvc中实现双重身份验证5,对于内部用户,身份验证是通过Azure AD进行的。对于外部用户,存在登录页面进行登录。当外部用户尝试访问应用程序时,应该重定向到登录页面。
我应该在哪里对用户进行身份验证并检查该用户是内部用户还是外部用户,还建议在哪里指定登录页面的重定向URL?
以下是我根据某些博客尝试过的场景。
我创建了名为ExternalAuthAttribute的自定义属性。我继承了ActionFilterAttribute,IAuthenticationFilter。
我在OnAuthentication和OnAuthenticationChallenge中都尝试了重定向到登录页面。但这是行不通的。请在代码下方找到。
public void OnAuthentication(AuthenticationContext filterContext)
{
var user = filterContext.HttpContext.User;
if (user == null || !user.Identity.IsAuthenticated)
{
filterContext.Result = new HttpUnauthorizedResult();
// filterContext.Result = new HttpUnauthorizedResult();
RedirectResult redirectResult = new
RedirectResult("Account/Login", true);
}
}
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
{
var user = filterContext.HttpContext.User;
if (user == null || !user.Identity.IsAuthenticated)
{
filterContext.Result = new HttpUnauthorizedResult();
RedirectResult redirectResult = new RedirectResult("Account/Login", true);
}
}
*************Controller****************************
[Authorize]
public class AccountController : Controller
{
public AccountController()
{
_dataAccessor = dataAccessor;
}
[ExternalAuthAttribute]
public ActionResult Login()
{
if (User.Identity.IsAuthenticated)
{
return View();
}
else
return View("Login");
}
}
输出结果
如果用户是内部用户,则使用Azure AD登录,如果外部用户访问该页面,则重定向到“登录”页面。