Sitefinity теряет сеанс пользователя при перезагрузке с проверкой подлинности утверждений

У меня есть веб-приложение, над которым я работаю, которое использует аутентификацию утверждений, но у меня есть проблема с удалением вошедшего в систему пользователя всякий раз, когда кто-либо обновляет страницу. Звучит очень похоже на эту проблему здесь: https://www.sitefinity.com/developer-network/forums/developing-with-sitefinity-/httpcontext-current-user-identity-isauthenticated-is-false-after-response-redirect, но, к сожалению, я не могу просто переключиться на аутентификацию на основе форм, потому что мне также нужно использовать openid для подключения к facebook и т. д.

У меня есть следующий код в моем global.asax.cs

protected void Application_Start(object sender, EventArgs e)
        {
            Telerik.Sitefinity.Abstractions.Bootstrapper.Initialized += Bootstrapper_Initialized;
            //  RegisterWebApiFilters(GlobalConfiguration.Configuration.Filters);
            System.Web.Helpers.AntiForgeryConfig.UniqueClaimTypeIdentifier = System.Security.Claims.ClaimTypes.NameIdentifier;            
        }

 protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            var identity = System.Web.HttpContext.Current.User.Identity as System.Security.Claims.ClaimsIdentity;
            var claimsUser = ClaimsManager.GetCurrentIdentity();
            //identity.AddClaim(new System.Security.Claims.Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", identity.Name));
            identity.AddClaim(new System.Security.Claims.Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", identity.Name));
            //System.Web.Helpers.AntiForgeryConfig.UniqueClaimTypeIdentifier = System.Security.Claims.ClaimTypes.NameIdentifier;
        }

Переменная идентификатора в приведенном выше коде показывает, что пользователь, вошедший в систему, хорошо перед перезагрузкой страницы, включая то, что он хранится в файлах cookie, но после перезагрузки возвращается как анонимный пользователь.

Я думаю, что у меня тоже правильно настроен web.config. У меня есть IdentityModel, установленный на следующее:

<system.identityModel.services>
    <federationConfiguration>
      <wsFederation passiveRedirectEnabled="true" issuer="http://localhost" realm="http://localhost" requireHttps="false" />
      <cookieHandler requireSsl="false" />
    </federationConfiguration>

Любые идеи были бы хорошы.


person mwgriffith    schedule 04.04.2018    source источник


Ответы (1)


Я думаю, что вы столкнулись с ошибкой AntiforgeryToken при отправке любых данных формы и размещении кода в событии Application_AuthenticateRequest, попробуйте приведенный ниже код, который может сработать для вас! потому что с каждым запросом вы добавляете претензию... где, поскольку я проверяю претензию с каждым запросом, если он не добавлен, то добавьте претензию, иначе пасха.

    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        var identity = System.Web.HttpContext.Current.User.Identity as System.Security.Claims.ClaimsIdentity;

        if (!identity.FindAll(System.Security.Claims.ClaimTypes.NameIdentifier).Any())
        {
            identity.AddClaim(new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.NameIdentifier, System.Web.HttpContext.Current.User.Identity.Name));
        }
        System.Web.Helpers.AntiForgeryConfig.UniqueClaimTypeIdentifier = System.Security.Claims.ClaimTypes.NameIdentifier;
    }
person Muhammad Essa    schedule 11.04.2018