Как вручную установить значение HttpContext.User.Identity.IsAuthenticated - PullRequest
0 голосов
/ 12 марта 2019

Я создаю приложение Asp.NET MVC 5.В этом проекте я пытаюсь внедрить пользовательский механизм проверки подлинности (я не хочу использовать внешние проверки подлинности с помощью форм / OWIN и т. Д.)

Я создал настраиваемый атрибут авторизации следующим образом:

[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class myAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {            
        if (!HttpContext.Current.Request.IsAuthenticated)
        {
            httpContext.Response.Redirect("~/Account/Login");
        }                            

        return base.AuthorizeCore(httpContext);
    }
}

И в своем действии входа в систему я пытаюсь изменить значение

HttpContext.User.Identity.IsAuthenticated

Но оно доступно только для чтения, и я не могу изменить значение.Могу ли я изменить его значение вручную или я делаю логическую ошибку.

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Мой ответ может вас не устраивать, но может помочь.В моем приложении ASP.NET Core MVC администраторы должны выдавать себя за других пользователей.Это приложение для внутренней сети, и, очевидно, пользователи проходят проверку подлинности Windows.Это делается благодаря запросу ajax к этому действию контроллера:

public async Task<JsonResult> UserImpersonation(IdentityExtension userIdentity)

IdentityExtension - это пользовательский класс, для которого вы можете наблюдать подпись ниже:

public class IdentityExtension : IIdentity
{       
    public IdentityExtension()
    { }
    public IdentityExtension(string name)
    {
        this.Name = name;
    }
    public string AuthenticationType => "Kerberos";

    public bool IsAuthenticated => true;

    public string Name { get; set; }
}

Метод UserImpersonation возвращает успехсостояние метода ReplaceUser, который обновляет HttpContext.User следующим образом:

this.HttpContext.User = identity as ClaimsPrincipal;
return true;

идентификатор, являющийся экземпляром IdentityExtension.

Я надеюсь, что мое решение может быть адаптировано к вашему варианту использования!

0 голосов
/ 12 марта 2019

вы не можете использовать FormsAuthentication.SetAuthCookie?

https://docs.microsoft.com/en-us/dotnet/api/system.web.security.formsauthentication.setauthcookie?view=netframework-4.7.2

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