Schreiben Sie eine einfache Web-API zur AD-Konto- und Kennwortüberprüfung über ASP.NET Core

Kürzlich habe ich versucht, ein Programm zur Änderung des AD-Kontokennworts über ASP.NET Core zu schreiben.,Was die Architektur betrifft, gibt es im Allgemeinen eine Web-API für die AD-Authentifizierung und Passwortänderung.,Schreiben Sie abschließend eine Desktop-Anwendung,Lassen Sie die Benutzer es selbst ändern。Was dieses Mal fertiggestellt ist, ist die Web-API zur Konto- und Passwortüberprüfung.,Das Programm ist wie folgt:

„Projektvorlage“

  • ASP .NET Core Web API

《NuGet 安裝套件》

  • System.DirectoryServices.Protocols (AD-Suite)
  • Swashbuckle.AspNetCore (API-Testsuite,Oder beim Hinzufügen eines neuen Projekts,Sie können auch OpenAPI überprüfen)

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; // 驗證失敗
            }
        }
    }
}

Controller/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;
    }
}

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

Wann testen?,Über Swagger,Geben Sie zum Testen Ihr Konto und Ihr Passwort ein。

4 Antworten

  1. Lao Sen Chang Tan IT-Hilfe » Eine Desktop-Anwendung zur Änderung von AD-Passwörtern, geschrieben in .NET MAUI Blazor (Gepaart mit Web-API) Sagt |

    […]   完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,Als nächstes verwenden Sie .NET MAUI Blazor, um Desktop-Programme zu schreiben。Nachdem ich ein wenig über Blazor erfahren habe,Ich fühle mich so magisch,Es fühlt sich an, als würde man eine Webseite in eine Anwendung einfügen,Während der Ausführung können Sie im „Job Manager“ auch Edge-bezogene Komponenten sehen, die dahinter ausgeführt werden.,Drücken Sie dann F12 und es erscheint ein Fenster mit den Entwicklertools! Aber das gab mir auch einige Sicherheitsbedenken.。Aber das Gesamtgefühl ist etwas ganz Besonderes.,Ich bin mit der Syntax von Webseiten vertraut,Verwenden Sie Razor, um UI-Bildschirme zu entwerfen,Fühlen Sie sich freundlicher。 […]

  2. Lao Sen Chang Tan IT-Hilfe » Verwenden Sie ASP.NET Core, um eine Web-API zu schreiben, die es Benutzern ermöglicht, ihre AD-Kennwörter zu ändern Sagt |

    […] API zur Überprüfung des AD-Passworts […]

  3. Sean Sagt |

    Bruder,軟體功力越來越強囉!

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

    Anson Antworten |

Leave a Comment

Bitte beachten Sie,: Kommentar Moderation ist aktiviert und kann Ihren Kommentar verzögern. Es besteht keine Notwendigkeit zur Stellungnahme reichen Sie.