Эх сурвалжийг харах

!881 添加强密码验证配置和功能
Merge pull request !881 from Mr先生/next

zuohuaijun 2 жил өмнө
parent
commit
ac228b6b07

+ 3 - 0
Admin.NET/Admin.NET.Application/Configuration/App.json

@@ -39,6 +39,9 @@
     "WorkerPrefix": "adminnet_" // 缓存前缀
   },
   "Cryptogram": {
+    "StrongPassword": false, //是否开启密码强度验证
+    "PasswordStrengthValidation": "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#$%\\*-\\+=:,\\\\?\\[\\]\\{}]).{6,16}$", //密码强度验证正则表达式,必须须包含大小写字母、数字和特殊字符的组合,长度在6-16之间
+    "PasswordStrengthValidationMsg": "密码必须包含大小写字母、数字和特殊字符的组合,长度在6-16之间", //密码强度验证消息提示
     "CryptoType": "SM2", // 密码加密算法:MD5、SM2、SM4
     "PublicKey": "04F6E0C3345AE42B51E06BF50B98834988D54EBC7460FE135A48171BC0629EAE205EEDE253A530608178A98F1E19BB737302813BA39ED3FA3C51639D7A20C7391A", // 公钥
     "PrivateKey": "3690655E33D5EA3D9A4AE1A1ADD766FDEA045CDEAA43A9206FB8C430CEFE0D94" // 私钥

+ 15 - 0
Admin.NET/Admin.NET.Core/Option/CryptogramOptions.cs

@@ -14,6 +14,21 @@ namespace Admin.NET.Core;
 /// </summary>
 public sealed class CryptogramOptions : IConfigurableOptions
 {
+    /// <summary>
+    /// 是否开启密码强度验证
+    /// </summary>
+    public bool StrongPassword { get; set; }
+
+    /// <summary>
+    /// 密码强度验证正则表达式
+    /// </summary>
+    public string PasswordStrengthValidation { get; set; }
+
+    /// <summary>
+    /// 密码强度验证提示
+    /// </summary>
+    public string PasswordStrengthValidationMsg { get; set; }
+
     /// <summary>
     /// 密码类型
     /// </summary>

+ 16 - 1
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -227,7 +227,22 @@ public class SysUserService : IDynamicApiController, ITransient
                 throw Oops.Oh(ErrorCodeEnum.D1004);
         }
 
-        user.Password = CryptogramUtil.Encrypt(input.PasswordNew);
+        //强密码验证
+        if (CryptogramUtil.StrongPassword)
+        {
+            if (input.PasswordNew.TryValidate(CryptogramUtil.PasswordStrengthValidation))
+            {
+                user.Password = CryptogramUtil.Encrypt(input.PasswordNew);
+            }
+            else
+            {
+                throw Oops.Oh(CryptogramUtil.PasswordStrengthValidationMsg);
+            }
+        }
+        else
+        {
+            user.Password = CryptogramUtil.Encrypt(input.PasswordNew);
+        }
         return await _sysUserRep.AsUpdateable(user).UpdateColumns(u => u.Password).ExecuteCommandAsync();
     }
 

+ 3 - 0
Admin.NET/Admin.NET.Core/Util/CryptogramUtil.cs

@@ -13,6 +13,9 @@ namespace Admin.NET.Core;
 
 public class CryptogramUtil
 {
+    public static readonly bool StrongPassword = App.GetConfig<bool>("Cryptogram:StrongPassword"); // 是否开启密码强度验证
+    public static readonly string PasswordStrengthValidation = App.GetConfig<string>("Cryptogram:PasswordStrengthValidation"); // 密码强度验证正则表达式
+    public static readonly string PasswordStrengthValidationMsg = App.GetConfig<string>("Cryptogram:PasswordStrengthValidationMsg"); // 密码强度验证提示
     public static readonly string CryptoType = App.GetConfig<string>("Cryptogram:CryptoType"); // 加密类型
     public static readonly string PublicKey = App.GetConfig<string>("Cryptogram:PublicKey"); // 公钥
     public static readonly string PrivateKey = App.GetConfig<string>("Cryptogram:PrivateKey"); // 私钥