Recientemente intenté escribir un programa de modificación de contraseña de cuenta AD a través de ASP.NET Core.,En términos de arquitectura, generalmente existe una API web para la autenticación de AD y la modificación de contraseñas.,Finalmente, escriba una aplicación de escritorio.,Permitir que los usuarios lo modifiquen ellos mismos。Lo que se completa esta vez es la API web para la verificación de cuentas y contraseñas.,El programa es el siguiente:
"Plantilla de proyecto"
- ASP .NET Core Web API
《NuGet 安裝套件》
- System.DirectoryServices.Protocolos (conjunto de anuncios)
- Espadachín.AspNetCore (Conjunto de pruebas API,O al agregar un nuevo proyecto,También puedes consultar OpenAPI)
Servicios/UserPasswordService.cs
using System.DirectoryServices.Protocols; using System.Net; namespace AD.Services { public class UserPasswordService(IOptions<LdapSettings> ldapSettings) { private readonly string _ldapServer = ldapSettings.Value.Server; private readonly string _domain = ldapSettings.Value.Domain; public bool Validate(string username, string password) { try { var credentials = username; using var connection = new LdapConnection(new LdapDirectoryIdentifier(_ldapServer)); connection.Credential = new NetworkCredential(username, password, _domain); connection.AuthType = AuthType.Negotiate; // 使用 Negotiate 會先嘗試 Kerberos,失敗再改試 NTLM。 connection.Bind(); // 嘗試綁定,成功表示驗證通過 return true; } catch (LdapException) { return false; // 驗證失敗 } } } }
Controladores/PasswordValidationController.cs
using AD.Services; using AD.Models; using Microsoft.AspNetCore.Mvc; namespace AD.Controllers { [Route("Password-Validate")] [ApiController] public class PasswordValidationController(UserPasswordService userPassword) : ControllerBase { [HttpPost("validate")] public IActionResult Validate([FromBody] LoginRequest request) { if (string.IsNullOrWhiteSpace(request.Username) || string.IsNullOrWhiteSpace(request.Password)) { return BadRequest("使用者帳號或密碼不可為空白。"); } var isValid = userPassword.ValidatePassword(request.Username, request.Password); return isValid ? Ok("驗證成功。") : Unauthorized("驗證失敗。"); } } }
Modelos/LoginRequestDTO.cs
namespace AD.Models { public class LoginRequestDTO { public string Username { get; set; } // DTO (Data Transfer Object) 類型的屬性不需要初始化,因為它們的值由外部輸入資料 (例如 HTTP 請求) 決定。 public string Password { get; set; } } }
Modelos/LdapSettings.cs
namespace AD.Models { public class LdapSettings { public string Server { get; set; } = string.Empty; public string Domain { get; set; } = string.Empty; } }
configuración de aplicaciones.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "LdapSettings": { "Server": "dc.abc.com.tw", // 如果是用 Kerberos 驗證,AD 的伺服器不可以使用 IP。 "Domain": "abc" } }
Programa.cs
using AD.Models; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.Configure<LdapSettings>(builder.Configuration.GetSection("LdapSettings")); // 讀取 appsettings.json 的 LdapSettings 資料。 builder.Services.AddScoped<UserPasswordService>(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline. // 讓 Swagger 只在開發環境時使用。 if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
cuando probar,Vía arrogancia,Ingrese su cuenta y contraseña para probar。
[…] 完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,A continuación, utilice .NET MAUI Blazor para escribir programas de escritorio.。Después de aprender un poco sobre Blazor,me siento tan magico,Es como poner una página web en una aplicación.,Cuando se ejecuta, también puede ver los componentes relacionados con Edge ejecutándose detrás de él en el "Administrador de trabajos".,Luego presione F12 y aparecerá una ventana de herramientas de desarrollador. Pero esto también me generó algunas preocupaciones de seguridad.。Pero el sentimiento general es bastante especial.,Resulta que estoy familiarizado con la sintaxis de las páginas web.,Utilice Razor para diseñar pantallas de interfaz de usuario,Sentirse más amigable。 […]
[…] API para verificar la contraseña de AD […]
hermano,軟體功力越來越強囉!
因為最近認識了一個很給力的兄弟叫 AI 😀