Récemment, j'ai essayé d'écrire un programme de modification du mot de passe du compte AD via ASP.NET Core.,En termes d'architecture, il existe généralement une API Web pour l'authentification AD et la modification du mot de passe.,Enfin, écrivez une application de bureau,Laissez les utilisateurs le modifier eux-mêmes。Ce qui est complété cette fois, c'est l'API Web pour la vérification du compte et du mot de passe.,Le programme est le suivant:
"Modèle de projet"
- ASP .NET Core Web API
《NuGet 安裝套件》
- System.DirectoryServices.Protocoles (suite publicitaire)
- Swashbuckle.AspNetCore (Suite de tests API,Ou lors de l'ajout d'un nouveau projet,Vous pouvez également consulter OpenAPI)
Services/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; // 驗證失敗 } } } }
Contrôleurs/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("驗證失敗。"); } } }
Modèles/LoginRequestDTO.cs
namespace AD.Models { public class LoginRequestDTO { public string Username { get; set; } // DTO (Data Transfer Object) 類型的屬性不需要初始化,因為它們的值由外部輸入資料 (例如 HTTP 請求) 決定。 public string Password { get; set; } } }
Modèles/LdapSettings.cs
namespace AD.Models { public class LdapSettings { public string Server { get; set; } = string.Empty; public string Domain { get; set; } = string.Empty; } }
appsettings.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "LdapSettings": { "Server": "dc.abc.com.tw", // 如果是用 Kerberos 驗證,AD 的伺服器不可以使用 IP。 "Domain": "abc" } }
Programme.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();
Quand tester,Via Swagger,Entrez votre compte et votre mot de passe pour tester。
[…] 完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,Ensuite, utilisez .NET MAUI Blazor pour écrire des programmes de bureau。Après avoir appris un peu sur Blazor,Je me sens tellement magique,C'est comme mettre une page Web dans une application,Lors de l'exécution, vous pouvez également voir les composants liés à Edge s'exécutant derrière dans le "Gestionnaire de tâches".,Appuyez ensuite sur F12 et il y aura une fenêtre d'outils de développement ! Mais cela m'a également posé quelques problèmes de sécurité.。Mais le sentiment général est assez particulier.,Il se trouve que je connais la syntaxe des pages Web,Utilisez Razor pour concevoir des écrans d'interface utilisateur,Se sentir plus amical。 […]
[…] API pour vérifier le mot de passe AD […]
frère,軟體功力越來越強囉!
因為最近認識了一個很給力的兄弟叫 AI 😀