IdentityController.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System.Security.Cryptography;
  2. using System.Text;
  3. using Hotline.Application.Identity;
  4. using Hotline.Caching.Interfaces;
  5. using Hotline.Settings;
  6. using Hotline.Share.Dtos.Identity;
  7. using Microsoft.AspNetCore.Authorization;
  8. using Microsoft.AspNetCore.Mvc;
  9. using XC.RSAUtil;
  10. using XF.Domain.Constants;
  11. using XF.Domain.Exceptions;
  12. namespace Hotline.Api.Controllers;
  13. public class IdentityController : BaseController
  14. {
  15. private readonly IIdentityAppService _identityAppService;
  16. private readonly ISystemSettingCacheManager _systemSettingCacheManager;
  17. private const string PublicKey = @"-----BEGIN PUBLIC KEY-----
  18. MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgw+/x6IQPkH0A4eoF63j
  19. kLThsOXWyNBdcL9LATGy/G1yTHOr1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRW
  20. MONxIIF289riS6bDI4Ox/pFmOfmElFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/v
  21. oVeDTiOIw9y3tokIxjKwuJ/mQ66MkKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6
  22. WBFWkxlAqKOWggDU7YohfrbNkg3bd0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+P
  23. Prr5JWDNYQTXFQklqgae+Puge7xxZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJ
  24. UQIDAQAB
  25. -----END PUBLIC KEY-----";
  26. private const string PrivateKey = @"-----BEGIN RSA PRIVATE KEY-----
  27. MIIEowIBAAKCAQEAgw+/x6IQPkH0A4eoF63jkLThsOXWyNBdcL9LATGy/G1yTHOr
  28. 1RyKJB//iNug+V8DIoIHuFTlhgLHDbSqxvRWMONxIIF289riS6bDI4Ox/pFmOfmE
  29. lFRk0lKGihaTE2Aefd6g/N+RfLLaHWztY+/voVeDTiOIw9y3tokIxjKwuJ/mQ66M
  30. kKh78AqQjjSD/3jcBP8ZhMyCJOK9XQcqvhD6WBFWkxlAqKOWggDU7YohfrbNkg3b
  31. d0oGE6zCE2EHhkcQbzGCh3lu1zf4TfKMXD+PPrr5JWDNYQTXFQklqgae+Puge7xx
  32. ZGYRoi5YpIUnkQGm6zpPxhIOdxlz+Yb5geSJUQIDAQABAoIBAAe+312BKUbsp0BV
  33. fOyCqoTLqTJHBcBneWY86pte9bjaZQYPU1PsdF452o8a38gXwpErBcwcjwCyWv48
  34. iQKUv8qdiSWGe+Jh3hGM1lKGfsyl3i3wnlJqgcI2U1zc2a4BoREHnmm4yBnfs2lI
  35. HegpRCG7u3cGPZfJtxJyxdHPfsc3wk8sXt+Byqkuym87l0a8wEF7b33f2hP2R7m/
  36. 37qYvTaGX3yN4s1rssQ3wBEfHEsesQmrQrEkRIUnWfgpkH3FdR5T1V4USC6GhM6x
  37. sIxqwBBYLL2LhVcNEifegqHtLZOw0VfUfpvoKnH5omSjUP5X+c8dmY9KPoKGpYFT
  38. l09fiRMCgYEAwSAmJr8G/xOCPtkRZ9qpxOwAeqA9iEhB3ViIydESrYMZGUaIKAWV
  39. ofOuDIdaMgW/2hyQtJasAnlX87Za7iODcBAMMAPSNiLEXk9nHWO+Xw/oMakgS5Dg
  40. uE2J02Bn4KFTCGALtfo70A40kkikkR2UdD4RG6j+DgI2JxxrCgaKiIMCgYEArbrv
  41. cvJs62LlvOFdVCY3mWEJkoBbStHGq2GdtZ5Rx9oNqiy3j/xT7Wav061OPCaC2rcd
  42. ALEH7AA3JJtAMr6QRv3HYyd2NIrlqS6pn4tInIpqlarrnVkkOk0WhsWVkScQJyx6
  43. eLKQ24zEF3wHslrRpHcclCWjtQ52TmWOuUvy9psCgYAWw6BbntbHSFho6hNIJ5kt
  44. Uhg4XB0ErGe/HIl7KH7IHxTdStgPx6C8p0mTxnyWOuFDZ2yTLNN3sy/v1UXgniUH
  45. F40oN7sWkICPEVL5PuGYuPpIqEPbRGeIsfMWDF4SN1HfQdr/h1B3lMUTnSZwyIjQ
  46. LuS7Wu8fXZlegNYJJ3462wKBgE5TSF9vktGw/djhVj15GXoKONGXExGxcDuWQA9A
  47. +Kf81EpT7NJ6tbADquPpb6tIxZgsFGRabDLnifT0FcaLCesnwXwfr3hS4uYaxpjK
  48. qAsDkLg3nhCLvvyWAsDyVdNiZDL1J6ZBA3Qoi8P2xFWSApB+ryDPs3YOtiH0QZui
  49. 9UBfAoGBAIQ2uv4J7ql++EpNNtLzOhTEpyjWS+qRSZRRXfKN2lm7e7czOsSpKIJx
  50. Q9PP8NTEmKqdI3WVFYqW/OlOFC6sjiscTOOn9Tc5Mrcn8ocCjAPjkhkCCVRMiJnv
  51. jxrWXHbT1FB6DqkdOnBbQqS1Azqz5HxLlSyEK3F60e3SgB5iZsDZ
  52. -----END RSA PRIVATE KEY-----";
  53. public IdentityController(IIdentityAppService identityAppService, ISystemSettingCacheManager systemSettingCacheManager)
  54. {
  55. _identityAppService = identityAppService;
  56. _systemSettingCacheManager = systemSettingCacheManager;
  57. }
  58. /// <summary>
  59. /// 登录
  60. /// </summary>
  61. /// <param name="dto"></param>
  62. /// <returns></returns>
  63. [AllowAnonymous]
  64. [HttpPost("login")]
  65. public async Task<string> Login([FromBody] LoginDto dto)
  66. {
  67. dto = Decrypt(dto);
  68. return await _identityAppService.LoginAsync(dto, HttpContext.RequestAborted);
  69. }
  70. [AllowAnonymous]
  71. [ApiExplorerSettings(IgnoreApi = true)]
  72. [HttpPost("token")]
  73. public async Task<string> LoginWithoutCrypt([FromBody] LoginDto dto)
  74. {
  75. return await _identityAppService.LoginAsync(dto, HttpContext.RequestAborted);
  76. }
  77. /// <summary>
  78. /// 登录页系统配置
  79. /// </summary>
  80. /// <returns></returns>
  81. [AllowAnonymous]
  82. [HttpGet("login-page-info")]
  83. public async Task<LoginPageInfoDto> LoginPageInfo()
  84. {
  85. var SysName = _systemSettingCacheManager.GetSetting(SettingConstants.SysName).SettingValue;
  86. var LoginImage = _systemSettingCacheManager.GetSetting(SettingConstants.LoginImage).SettingValue;
  87. return new LoginPageInfoDto() { SysName = SysName, LoginImage = LoginImage };
  88. }
  89. private LoginDto Decrypt(LoginDto dto)
  90. {
  91. if (string.IsNullOrEmpty(dto.Username) || string.IsNullOrEmpty(dto.Password))
  92. throw UserFriendlyException.SameMessage("非法参数");
  93. var pkcs1 = new RsaPkcs1Util(Encoding.UTF8, PublicKey, PrivateKey);
  94. try
  95. {
  96. var uname = pkcs1.Decrypt(dto.Username, RSAEncryptionPadding.Pkcs1);
  97. var pwd = pkcs1.Decrypt(dto.Password, RSAEncryptionPadding.Pkcs1);
  98. return new LoginDto { Username = uname, Password = pwd };
  99. }
  100. catch (Exception e)
  101. {
  102. throw new UserFriendlyException($"解密失败:{e.Message}", "无效参数");
  103. }
  104. }
  105. }