HttpContextExcention.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using Microsoft.AspNetCore.Http;
  3. using Newtonsoft.Json;
  4. using System.Linq;
  5. using DFS.Core.Mvc.Jwt.Model;
  6. namespace DFS.Core.Mvc.Jwt
  7. {
  8. /// <summary>
  9. /// 扩展httpcontext 当前授权的用户
  10. /// </summary>
  11. public static class HttpContextExcention
  12. {
  13. /// <summary>
  14. /// 获取当前授权用户信息
  15. /// </summary>
  16. /// <param name="httpContext"></param>
  17. /// <returns></returns>
  18. public static TokenModel GetCurrentUser(this IHttpContextAccessor httpContext, IAuhUser user)
  19. {
  20. var str = httpContext.HttpContext.User.Claims.FirstOrDefault(p => p.Type == JwtConfig.TokenUser)?.Value;
  21. if (!string.IsNullOrWhiteSpace(str))
  22. {
  23. return JsonConvert.DeserializeObject<TokenModel>(str);
  24. }
  25. return null;
  26. }
  27. /// <summary>
  28. /// 获取当前授权的客户端信息
  29. /// </summary>
  30. /// <param name="httpContext"></param>
  31. /// <returns></returns>
  32. public static OpenClient GetCurrentClient(this IHttpContextAccessor httpContext)
  33. {
  34. var str = httpContext.HttpContext.User.Claims.FirstOrDefault(p => p.Type == "OpenApp")?.Value;
  35. if (!string.IsNullOrWhiteSpace(str))
  36. {
  37. return JsonConvert.DeserializeObject<OpenClient>(str);
  38. }
  39. return null;
  40. }
  41. /// <summary>
  42. /// 扩展客户端加密比较
  43. /// </summary>
  44. /// <param name="httpContextAccessor"></param>
  45. /// <param name="body">请求的参数body</param>
  46. /// <param name="key">秘钥</param>
  47. /// <returns></returns>
  48. public static bool AuthSign(this IHttpContextAccessor httpContextAccessor, string body, string key)
  49. {
  50. var client = httpContextAccessor.GetCurrentClient();
  51. if (client == null)
  52. {
  53. return false;
  54. }
  55. if ((client?.Sign ?? "").IsNullOrWhiteSpace())
  56. {
  57. return false;
  58. }
  59. return string.Equals(SignatureHelper.GetSignStr(client.ToMapDictionary(), body, key),
  60. client.Sign);
  61. }
  62. }
  63. }