Example #1
0
        public SecurityContextOld(ClaimsIdentity impersonatedClaimsIdentity, List <string> roles, SecurityContextOld impersonationContext)
            : this(impersonatedClaimsIdentity, roles)
        {
            Require.NotNull(impersonationContext, "impersonationContext");

            _impersonationSecurityContext = impersonationContext;
        }
Example #2
0
        /// <summary>
        ///     Aktiviert die Simulation der Nutzung der Anwendung im Kontext eines anderen Nutzers.
        /// </summary>
        /// <param name="user"></param>
        public void EnableImpersonation(User user)
        {
            Require.NotNull(user, "user");

            if (!CanImpersonateUser(user))
            {
                LogManager.GetLogger <SecurityContextOld>().ErrorFormat("Unerlaubter Impersonifizierungs-Versuch: Nutzer {0} wollte {1} simulieren", _currentClaimsIdentity.Name, user);
                throw new SecurityException("Der Nutzer darf nicht impersonifiziert werden.");
            }

            LogManager.GetLogger <SecurityContextOld>().InfoFormat("Impersonifizierung aktiviert: Nutzer {0} simuliert {1}", _currentClaimsIdentity.Name, user);


            /*TODO: Das gibt es an anderer Stelle schon mal. Sollte nur einmal existieren.*/
            SecurityUser impersonatedSecurityUser = new SecurityUser(user.BusinessId.ToString(), user.UserName, user.Email, user.PasswordHash, user.IsEnabled, user.Roles.ToList(), user.FirstName, user.LastName);
            /*zu simulierende ClaimsIdentity erstellen*/
            ClaimsIdentity impersonatedClaimsIdentity = new ClaimsIdentity();

            /*Rollen als Claims hinzufügen*/
            foreach (string role in _roles)
            {
                impersonatedClaimsIdentity.AddClaim(new Claim(ClaimTypes.Role, role));
            }

            impersonatedClaimsIdentity.AddClaim(new Claim(ClaimTypes.Name, impersonatedSecurityUser.UserName));
            impersonatedClaimsIdentity.AddClaim(new Claim(ClaimTypes.Email, impersonatedSecurityUser.Email));
            impersonatedClaimsIdentity.AddClaim(new Claim(ClaimTypes.PrimarySid, impersonatedSecurityUser.Id));
            impersonatedClaimsIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, impersonatedSecurityUser.Id));

            /* Impersonifizierten Context mit Backup auf diesen Context erstellen*/
            SecurityContextOld impersonationContext = new SecurityContextOld(impersonatedClaimsIdentity, impersonatedSecurityUser.Roles.ToList(), this);

            /* Impersonifizierten Context aktivieren */
            AttachToSession(impersonationContext);
        }
        /// <summary>Authenticates the request.</summary>
        /// <param name="filterContext">The context to use for authentication.</param>
        public void OnAuthentication(AuthenticationContext filterContext)
        {
            if (!filterContext.Principal.Identity.IsAuthenticated)
            {
                /*Kein angemeldeter Nutzer*/

                /*SecurityContext aus der Session entfernen.*/
                SecurityContextOld.DetachFromSession();
                /*SecurityContext aus dem HttpContext entfernen.*/
                filterContext.HttpContext.Items["SecurityContext"] = null;
                return;
            }

            /* Zunächst prüfen, ob der SecurityContext bereits hinterlegt ist.
             * dann muss der SecurityContext nicht erneut erzeugt werden.
             */
            if (SecurityContextOld.IsAttachedToSession())
            {
                return;
            }

            AuthorizationManager authorizationManager = new AuthorizationManager();
            //IUserService userService = ContextRegistry.GetContext().GetObject<IUserService>();
            //User user = userService.GetByBusinessId(Guid.Parse(filterContext.Principal.Identity.GetUserId()));

            ClaimsIdentity currentClaimsIdentity = filterContext.Principal.Identity as ClaimsIdentity;

            if (currentClaimsIdentity == null || currentClaimsIdentity.IsAuthenticated == false)
            {
                /*Kein angemeldeter Nutzer*/

                /*SecurityContext aus der Session entfernen.*/
                SecurityContextOld.DetachFromSession();
                /*SecurityContext aus dem HttpContext entfernen.*/
                filterContext.HttpContext.Items["SecurityContext"] = null;

                return;
            }

            List <Claim>  claimRoles = currentClaimsIdentity.Claims.Where(c => c.Type == ClaimTypes.Role).ToList();
            List <string> roles      = claimRoles.Select(claimsRole => claimsRole.Value.ToString()).ToList();

            /*Security Context erzeugen*/
            SecurityContextOld securityContext = new SecurityContextOld(currentClaimsIdentity, roles);

            /*SecurityContext an der Session hinterlegen.*/
            SecurityContextOld.AttachToSession(securityContext);
            /*Zusätzlich den SecurityContext am HttpContext hinterlegen.*/
            filterContext.HttpContext.Items["SecurityContext"] = securityContext;
        }
Example #4
0
 /// <summary>
 ///     Hinterlegt den SessionContext an der aktuellen Session.
 /// </summary>
 /// <param name="securityContext"></param>
 public static void AttachToSession(SecurityContextOld securityContext)
 {
     HttpContext.Current.Session["SecurityContext"] = securityContext;
 }