настраиваемый атрибут аутентификации для ограничения API с помощью группы windows - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу создать атрибут, который позволяет указать, каким группам разрешено выполнять этот API.Во-первых, мне нужно проверить, является ли пользователь членом этой группы, и если нет, ограничить этого пользователя, показывая ошибку 401.

Я упоминал об этом, но это мне не сильно помогло. Как получить имя аутентифицированного пользователя, IP-адрес и действие контроллера, вызываемое из фильтра HTTP?

https://www.c -sharpcorner.com / article / filters-in-Asp-Net-mvc-5-0-part-двенадцать /

Вот мой код

 namespace ApiSample.Filters

{

public class AuthorizationRequiredAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        base.OnAuthorization(actionContext);
        if (true == false)
        {
            actionContext.Response =
                CreateHttpResponseMessage(HttpStatusCode.Unauthorized, "error",
                    "You  are not authorized to view this page.");
        }
    }

    /// <summary>
    ///     Overrides the default HTTP response and data that is sent back on an unauthorized request
    /// </summary>
    /// <param name="ctx"></param>
    protected override void HandleUnauthorizedRequest(HttpActionContext ctx)
    {
        ctx.Response = CreateHttpResponseMessage(HttpStatusCode.Unauthorized, "error",
            "Authentication is required for this operation");
    }


    public static HttpResponseMessage CreateHttpResponseMessage(HttpStatusCode httpStatusCode)
    {
        var httpResponseMessage = new HttpResponseMessage
        {
            StatusCode = httpStatusCode
        };
        return httpResponseMessage;
    }

    public static HttpResponseMessage CreateHttpResponseMessage(HttpStatusCode httpStatusCode, string messageKey, string messageValue)
    {
        var httpResponseMessage = new HttpResponseMessage
        {
            StatusCode = httpStatusCode
        };
        if (!string.IsNullOrWhiteSpace(messageKey) && !string.IsNullOrWhiteSpace(messageValue))
        {
            httpResponseMessage.Content =
                new StringContent("{\"" + messageKey + "\":\"" + messageValue.Replace("\"", "\\\"") + "\"}",
                    Encoding.UTF8, "application/json");
        }
        return httpResponseMessage;
    }
}

}

namespace ApiSample.Filters

{открытый класс FilterThis: ActionFilterAttribute {

    public override void OnActionExecuting(HttpActionContext filterContext)
    {
        //custom authentication logic


        filterContext.Response =  filterContext.Request.CreateResponse(HttpStatusCode.Unauthorized,
                new { Code = 401, Message = "Unable to access, Please login again" });


        base.OnActionExecuting(filterContext);


    }
}

}

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
    [FilterThis]
    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...