ASP.NET пользовательская аутентификация / авторизация - PullRequest
0 голосов
/ 29 мая 2019

Мне нужно авторизовать моего пользователя через внешнюю службу, без удостоверения личности, без катаны. Только на основе логического значения true или false. Который отправлен по API. Как я могу ovveride атрибут [Authorize] для удовлетворения моих потребностей?

public class LoginController {


  public ActionResult LoginThroughExternalApp(authModel model)  
  {

   bool isUserExist = externalApp.isUserExist(model.userName, model.Password);

   if(isUserExist)
   {
        return RedirecToAction("DefaultActionName","DefaultController");
   }

     return RedirectToAction("Redirect to error login page.");
  }
}  



    [Authorize]
    public class DefaultController 
    {
      public ActionResult DefaultAction() 
      {
         //Do some stuff
      }
    }

1 Ответ

0 голосов
/ 30 мая 2019

Вы можете определить CustomActionAttribute, чтобы добавить любой метод с определенными параметрами. Затем вы можете выполнить пользовательскую операцию, чтобы позволить пользователю.

[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public class CustomActionAttribute : FilterAttribute, IActionFilter, IResultFilter
{
    public string ParamName { get; set; }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        throw new NotImplementedException();
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {

        if (filterContext.ActionParameters.ContainsKey(ParamName))
        {
            try
            {
                var model = filterContext.ActionParameters[ParamName] as authModel;
                bool isUserExist = externalApp.isUserExist(model.userName, model.Password);
                if (isUserExist)
                    // this code let you to go on without checking authorization.
                    return;
            }
            catch
            {
            }
        }
        filterContext.Result = new ViewResult
        {
            ViewName = "~/Views/Shared/UnAuthorizeAction.cshtml",
        };

    }

    public void OnResultExecuted(ResultExecutedContext filterContext)
    {
        throw new NotImplementedException();
    }

    public void OnResultExecuting(ResultExecutingContext filterContext)
    {
        throw new NotImplementedException();
    }
}

А вот и его использование:


[CustomActionAttribute(IdParamName = model)]
public ActionResult DefaultAction(authModel model)
{
    //...
}

...