כתוב חשבון AD פשוט ואימות סיסמה Web API דרך ASP.NET Core

לאחרונה ניסיתי לכתוב תוכנית לשינוי סיסמה בחשבון AD דרך ASP.NET Core.,במונחים של ארכיטקטורה, יש בדרך כלל ממשק API לאינטרנט לאימות AD ושינוי סיסמה.,לבסוף, כתוב יישום שולחן עבודה,תן למשתמשים לשנות את זה בעצמם。מה שהושלם הפעם הוא ה-Web API לאימות חשבון וסיסמה.,התוכנית היא כדלקמן:

"תבנית פרויקט"

  • ASP .NET Core Web API

《NuGet 安裝套件》

  • System.DirectoryServices.Protocols (סוויטת AD)
  • 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("驗證失敗。");
        }
    }
}

Models/LoginRequestDTO.cs

namespace AD.Models
{
    public class LoginRequestDTO
    {
        public string Username { get; set; } // DTO (Data Transfer Object) 類型的屬性不需要初始化,因為它們的值由外部輸入資料 (例如 HTTP 請求) 決定。
        public string Password { get; set; }
    }
}

Models/LdapSettings.cs

namespace AD.Models
{
    public class LdapSettings
    {
        public string Server { get; set; } = string.Empty;
        public string Domain { get; set; } = string.Empty;
    }
}

appssettings.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();

מתי לבדוק,דרך סוואגר,הזן את החשבון והסיסמה שלך כדי לבדוק。

4 תגובות

  1. לאוסן צ'אנג טאן עזרה IT » יישום שולחן עבודה לשינוי סיסמת AD שנכתב ב-.NET MAUI Blazor (בשילוב עם Web API) אומר |

    […]   完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,לאחר מכן, השתמש ב-.NET MAUI Blazor כדי לכתוב תוכניות שולחן עבודה。אחרי שלמדתי קצת על בלייזור,אני מרגיש כל כך קסום,זה מרגיש כמו להכניס דף אינטרנט לאפליקציה,בעת ריצה, אתה יכול גם לראות רכיבים הקשורים ל-Edge רצים מאחוריו ב"מנהל העבודה",לאחר מכן הקש F12 ויהיה חלון כלי מפתחים! אבל זה גם עורר בי כמה חששות אבטחה.。אבל התחושה הכללית די מיוחדת.,במקרה אני מכיר את תחביר דפי אינטרנט,השתמש ב-Razor כדי לעצב מסכי ממשק משתמש,מרגיש יותר ידידותי。 […]

  2. לאוסן צ'אנג טאן עזרה IT » השתמש ב-ASP.NET Core כדי לכתוב API אינטרנט המאפשר למשתמשים לשנות את סיסמאות AD שלהם אומר |

    […] API לאימות סיסמת AD […]

  3. שון אומר |

    אָח,軟體功力越來越強囉!

    因為最近認識了一個很給力的兄弟叫 AI 😀

    אנסון תגובה |

השאיר תגובה

שים לב: תגובת התמתנות מופעלת ועלולה לעכב את התגובה שלך. אין צורך להגיש מחדש את התגובה שלך.