لقد حاولت مؤخرًا كتابة برنامج تعديل كلمة مرور حساب AD من خلال ASP.NET Core.,فيما يتعلق بالهندسة المعمارية، توجد بشكل عام واجهة برمجة تطبيقات الويب لمصادقة AD وتعديل كلمة المرور.,وأخيرًا، قم بكتابة تطبيق سطح المكتب,اسمح للمستخدمين بتعديله بأنفسهم。ما اكتمل هذه المرة هو Web API للتحقق من الحساب وكلمة المرور.,البرنامج على النحو التالي:
"نموذج المشروع"
- ASP .NET Core Web API
《NuGet 安裝套件》
- System.DirectoryServices.Protocols (جناح إعلان)
- Swashbuckle.AspNetCore (مجموعة اختبار API,أو عند إضافة مشروع جديد,يمكنك أيضًا التحقق من OpenAPI)
الخدمات/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; // 驗證失敗 } } } }
وحدات التحكم/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("驗證失敗。"); } } }
النماذج/طلب تسجيل الدخولDTO.cs
namespace AD.Models { public class LoginRequestDTO { public string Username { get; set; } // DTO (Data Transfer Object) 類型的屬性不需要初始化,因為它們的值由外部輸入資料 (例如 HTTP 請求) 決定。 public string Password { get; set; } } }
النماذج/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" } }
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();
متى يتم الاختبار,عبر سواغر,أدخل حسابك وكلمة المرور للاختبار。
[…] 完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,بعد ذلك، استخدم .NET MAUI Blazor لكتابة برامج سطح المكتب。بعد أن تعلمت القليل عن Blazor,أشعر بالسحر الشديد,يبدو الأمر وكأنك تضع صفحة ويب في تطبيق ما,عند التشغيل، يمكنك أيضًا رؤية المكونات المتعلقة بـ Edge تعمل خلفها في "Job Manager",ثم اضغط F12 وستكون هناك نافذة أدوات المطور! لكن هذا أعطاني أيضًا بعض المخاوف الأمنية.。لكن الشعور العام مميز للغاية.,أنا على دراية ببناء جملة صفحة الويب,استخدم Razor لتصميم شاشات واجهة المستخدم,شعور أكثر ودية。 […]
[…] API للتحقق من كلمة مرور AD […]
شقيق,軟體功力越來越強囉!
因為最近認識了一個很給力的兄弟叫 AI 😀