//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 }; }
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)); }