//Action方法执行之前执行此方法
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            //给每一次请求分配一个特定编号
            CallContext.SetData(Constants.RequestLogId, DateTime.Now.ToString("yyyyMMddHHmmssfffffff") + CommonHelper.GetTimeStamp());

            if (actionContext.ActionDescriptor.GetCustomAttributes <AllowAnonymousAttribute>().Any())
            {
                return;
            }


            //前期考虑 前端调用直接把userid 以及accid 放在header里边  后期考虑使用token
            var request = actionContext.Request.Headers;

            var jsonFormatter = new JsonMediaTypeFormatter
            {
                SerializerSettings = { ContractResolver = new CamelCasePropertyNamesContractResolver() }
            };

            var token     = request.SingleOrDefault(x => x.Key.ToLower() == "token");
            var oAppkey   = request.SingleOrDefault(x => x.Key.ToLower() == "appkey");
            var strAppkey = oAppkey.Key == null ? string.Empty : oAppkey.Value.FirstOrDefault();

            var userContext = new EntityAccountManager();


            //token 授权
            if (token.Key != null)
            {
                try
                {
                    var strToken = token.Value.FirstOrDefault();
                    //解密获得token原始信息
                    var aesToken = AesHelper.Decrypt(strToken);
                    //添加到用户上下文
                    userContext = JsonConvert.DeserializeObject <EntityAccountManager>(aesToken);
                }
                catch
                {
                    throw new EmergencyException("api接口请求验证不通过", (int)ErrorCodeEnum.TokenIsExpired);
                }
            }
            else
            {
                throw new EmergencyException("api接口请求验证不通过", (int)ErrorCodeEnum.ApiRequestForbidden);
            }

            actionContext.Request.Properties[Constants.GlobalUserContextKeyName] = userContext;
            System.Threading.Thread.CurrentPrincipal = new EmergencyPrincipal
            {
                UserContext = userContext
            };
        }
Exemple #2
0
        public string GenerateJwtToken(EntityAccountManager entityAccount)
        {
            var claims = new[]
            {
                new Claim(ClaimTypes.Name, JsonConvert.SerializeObject(entityAccount))
            };
            var issure        = ConfigurationHelper.GetInstance().GetSection("Jwt").GetSection("issure").Value;
            var audience      = ConfigurationHelper.GetInstance().GetSection("Jwt").GetSection("audience").Value;
            var securitykey   = ConfigurationHelper.GetInstance().GetSection("Jwt").GetSection("securitykey").Value;
            var expireseconds = ConfigurationHelper.GetInstance().GetSection("Jwt").GetSection("expireseconds").Value.ToInt32(1800);

            var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securitykey));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                issuer: issure,
                audience: audience,
                claims: claims,
                expires: DateTime.Now.AddSeconds(expireseconds),
                signingCredentials: creds);

            return(new JwtSecurityTokenHandler().WriteToken(token));
        }