/// <summary>
        /// Parses the Authorization header and creates user credentials
        /// </summary>
        /// <param name="actionContext"></param>
        protected virtual AuthenticationIdentity AuthHeader(HttpActionContext actionContext)
        {
            string authHeader = null;
            var    auth       = actionContext.Request.Headers.Authorization;

            if (auth != null && auth.Scheme == "Bearer")
            {
                authHeader = auth.Parameter;
            }
            if (string.IsNullOrEmpty(authHeader))
            {
                return(null);
            }

            var jwtKey = System.Configuration.ConfigurationManager.AppSettings["jwtKey"];

            SymmetricAlgorithm     sa   = new SymmetricAlgorithm(SymmetricAlgorithm.Tipo.TripleDES);
            AuthenticationIdentity user = null;

            try
            {
                authHeader = JWT.JsonWebToken.Decode(authHeader, sa.Decrypt(jwtKey));
                user       = JsonConvert.DeserializeObject <AuthenticationIdentity>(authHeader);
            }
            catch
            {
            }

            return(user);
        }
        protected virtual void LoadUser(AuthenticationIdentity user, HttpActionContext actionContext)
        {
            if (HttpContext.Current != null)
            {
                BaseApiController baseApiController = actionContext.ControllerContext.Controller as BaseApiController;

                if (baseApiController != null)
                {
                    // Chave padrão do cache - nome do método + parâmetros.
                    string chave = RetornaChaveCache_LoadUser(user);
                    object cache = HttpContext.Current.Cache[chave];

                    if (cache == null)
                    {
                        #region Load user values

                        UsuarioWEB userLogged = new UsuarioWEB();

                        // Carrega usuário na session através do ticket de authenticação
                        userLogged.Usuario = new SYS_Usuario
                        {
                            ent_id = user.Entity
                            ,
                            usu_login = user.Login
                        };
                        SYS_UsuarioBO.GetSelectBy_ent_id_usu_login(userLogged.Usuario);

                        userLogged.Grupo = SYS_GrupoBO.GetEntity(new SYS_Grupo {
                            gru_id = user.Group
                        });

                        baseApiController.__userLogged = userLogged;

                        #endregion

                        HttpContext.Current.Cache.Insert(chave, userLogged, null, DateTime.Now.AddMinutes(GestaoEscolarUtilBO.MinutosCacheMedio)
                                                         , System.Web.Caching.Cache.NoSlidingExpiration);
                    }
                    else
                    {
                        baseApiController.__userLogged = cache as UsuarioWEB;
                    }
                }
            }
        }
 private string RetornaChaveCache_LoadUser(AuthenticationIdentity entity)
 {
     return(string.Format("LoadUserJWK_{0}_{1}_{2}", entity.Entity, entity.Login, entity.Group));
 }