Baru-baru ini saya mencoba menulis program modifikasi kata sandi akun AD melalui ASP.NET Core.,Dari segi arsitektur, umumnya ada Web API untuk otentikasi AD dan modifikasi kata sandi.,Terakhir, tulis aplikasi desktop,Biarkan pengguna memodifikasinya sendiri。Yang selesai kali ini adalah Web API untuk verifikasi akun dan password.,Programnya adalah sebagai berikut:
"Templat Proyek"
- ASP .NET Core Web API
《NuGet 安裝套件》
- Sistem.Layanan Direktori.Protokol (Paket IKLAN)
- Swashbuckle.AspNetCore (Rangkaian pengujian API,Atau saat menambahkan proyek baru,Anda juga dapat memeriksa OpenAPI)
Layanan/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; // 驗證失敗 } } } }
Pengontrol/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("驗證失敗。"); } } }
Model/LoginRequestDTO.cs
namespace AD.Models { public class LoginRequestDTO { public string Username { get; set; } // DTO (Data Transfer Object) 類型的屬性不需要初始化,因為它們的值由外部輸入資料 (例如 HTTP 請求) 決定。 public string Password { get; set; } } }
Model/LdapSettings.cs
namespace AD.Models { public class LdapSettings { public string Server { get; set; } = string.Empty; public string Domain { get; set; } = string.Empty; } }
pengaturan aplikasi.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "LdapSettings": { "Server": "dc.abc.com.tw", // 如果是用 Kerberos 驗證,AD 的伺服器不可以使用 IP。 "Domain": "abc" } }
Program.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();
Kapan harus menguji,Melalui Kesombongan,Masukkan akun dan kata sandi Anda untuk menguji。
[…] 完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,Selanjutnya, gunakan .NET MAUI Blazor untuk menulis program desktop。Setelah belajar sedikit tentang Blazor,Saya merasa sangat ajaib,Rasanya seperti memasukkan halaman web ke dalam aplikasi,Saat dijalankan, Anda juga dapat melihat komponen terkait Edge yang berjalan di belakangnya di "Manajer Pekerjaan",Lalu tekan F12 dan akan ada jendela alat pengembang! Namun hal ini juga memberi saya beberapa kekhawatiran keamanan.。Namun perasaan secara keseluruhan cukup istimewa.,Saya kebetulan akrab dengan sintaks halaman web,Gunakan Razor untuk mendesain layar UI,Merasa lebih ramah。 […]
[…] API untuk memverifikasi kata sandi AD […]
saudara laki-laki,軟體功力越來越強囉!
因為最近認識了一個很給力的兄弟叫 AI 😀