Esempio n. 1
0
        /// <summary>
        /// Called when authorization is required.
        /// </summary>
        /// <param name="filterContext">The filter context.</param>
        public void OnAuthorization(AuthorizationContext filterContext)
        {
            /*
             * var principal = filterContext.HttpContext.User;
             * HttpSessionState Session = HttpContext.Current.Session;
             *
             * TUserInfo user = default(TUserInfo);
             * user = PrepareUserInfo(principal, Session);
             * filterContext.HttpContext.User = (IPrincipal)user;*/

            TUserInfo user = (TUserInfo)AUserInfo <TUserProperties> .GetCurrentUserInfo();

            RolesRedirectURL    roleRedirect;
            RolesRedirectAction action = CheckAuthorize(user, out roleRedirect, IsAllowAnonymous, DisableRedirectRoles, filterContext);

            switch (action)
            {
            case RolesRedirectAction.Unauthorized:
                HandleUnauthorizedRequest(filterContext);
                break;

            case RolesRedirectAction.Redirect:
                filterContext.Result = new RedirectResult(roleRedirect.Url + "?urlReturn=" + filterContext.HttpContext.Request.RawUrl);
                break;

            default:
                break;
            }
        }
        public Task <HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func <Task <HttpResponseMessage> > continuation)
        {
            /*
             * var principal = actionContext.RequestContext.Principal;
             * HttpSessionState Session = HttpContext.Current.Session;
             *
             * TUserInfo user = default(TUserInfo);
             * user = PrepareUserInfo(principal, Session);
             * actionContext.RequestContext.Principal = (IPrincipal) user;*/

            TUserInfo user = (TUserInfo)AUserInfo <TUserProperties> .GetCurrentUserInfo();

            RolesRedirectURL    roleRedirect;
            RolesRedirectAction action = CheckAuthorize(user, out roleRedirect, IsAllowAnonymous, DisableRedirectRoles, actionContext);

            switch (action)
            {
            case RolesRedirectAction.Unauthorized:
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized));

            case RolesRedirectAction.Redirect:
                throw new HttpResponseException(roleRedirect.HttpResponseMessage);

            default:
                return(continuation());
            }
        }
Esempio n. 3
0
        public static TUserInfo PrepareUserInfo()
        {
            /*
             * var tests= BIASettingsReader.BIANetSection?.Authentication?.Tests;
             * foreach(HeterogeneousConfigurationElementBase test in tests)
             * {
             *  if (test is Test1Element)
             *  {
             *      string toto = ((Test1Element)test).KeyTest1;
             *  }
             *  if (test is Test2Element)
             *  {
             *      string toto = ((Test2Element)test).KeyTest2;
             *  }
             * }*/


            TUserInfo user             = new TUserInfo();
            string    cachingParameter = BIASettingsReader.BIANetSection?.Authentication?.Parameters?.Caching;
            bool      manageSession    = false;

            if (cachingParameter == "Session")
            {
                HttpSessionState Session = HttpContext.Current.Session;
                if (Session != null)
                {
                    manageSession = true;
                    if (Session[AuthenticationConstants.SessionUserInfo] != null)
                    {
                        AUserInfo <TUserProperties> .UserInfoContainer container = (AUserInfo <TUserProperties> .UserInfoContainer)Session[AuthenticationConstants.SessionUserInfo];
                        user.userInfoContainer = container;
                        CheckInfoToRefresh(user);
                    }
                    else
                    {
                        Session[AuthenticationConstants.SessionUserInfo] = user.userInfoContainer;
                    }
                }
            }


            IPrincipal principal = HttpContext.Current.User;

            user.Identity = (WindowsIdentity)principal.Identity;

            if (!user.Identity.IsAuthenticated)
            {
                ClientCertificateInHeaderCollection clientCertificateInHeader = BIASettingsReader.BIANetSection?.Authentication?.Identities?.OfType <ClientCertificateInHeaderCollection>().FirstOrDefault();
                if (clientCertificateInHeader != null && !user.Identity.IsAuthenticated)
                {
                    NameValueCollection headers = HttpContext.Current.Request.Headers;
                    string certHeader           = headers[clientCertificateInHeader.Key];
                    if (!String.IsNullOrEmpty(certHeader))
                    {
                        try
                        {
                            byte[]           clientCertBytes = Convert.FromBase64String(certHeader);
                            X509Certificate2 Certificate     = new X509Certificate2(clientCertBytes);
                            if (Certificate != null)
                            {
                                if (IsCertificatValid(Certificate, clientCertificateInHeader))
                                {
                                    user.Identity = new WindowsIdentity(GetCertificatValue(Certificate, clientCertificateInHeader.WindowsIdentity));
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            TraceManager.Error("Error when analyse certificat.", ex);
                        }
                    }
                    else
                    {
                        certHeader = "";
                    }
                }
            }

            /*
             * if (((user.Identity == null || user.Identity.IsAuthenticated==false) && (windowsIdentity != null && windowsIdentity.IsAuthenticated)) || (user.Certificate == null && certificat != null))
             * {
             *  if (retrivedFromSession)
             *  {
             *      user = new TUserInfo();
             *      HttpContext.Current.Session[AuthenticationConstants.SessionUserInfo] = user.userInfoContainer;
             *  }
             *  user.Identity = windowsIdentity;
             *  user.Certificate = certificat;
             * }
             * if (user.Identity == null) user.Identity = windowsIdentity;*/

            /*if (retrivedFromSession && user.Identity.IsAuthenticated && user.Login == null)
             * {
             *  user.userInfoContainer.identitiesShouldBeRefreshed = true;
             * }*/

            user.FinalizePreparation();

            if (manageSession && (user.Login == null))
            {
                HttpContext.Current.Session[AuthenticationConstants.SessionUserInfo] = null;
            }

            return(user);
        }