Escreva uma API Web simples de verificação de conta e senha do AD por meio do ASP.NET Core

Recentemente, tentei escrever um programa de modificação de senha de conta do AD por meio do ASP.NET Core.,Em termos de arquitetura, geralmente existe uma API Web para autenticação AD e modificação de senha.,Finalmente, escreva um aplicativo de desktop,Permita que os próprios usuários modifiquem。O que é concluído desta vez é a API Web para verificação de conta e senha.,O programa é o seguinte:

"Modelo de Projeto"

  • ASP .NET Core Web API

《NuGet 安裝套件》

  • System.DirectoryServices.Protocols (Conjunto de anúncios)
  • Swashbuckle.AspNetCore (Conjunto de testes de API,Ou ao adicionar um novo projeto,Você também pode verificar OpenAPI)

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

Controladores/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("驗證失敗。");
        }
    }
}

Modelos/LoginRequestDTO.cs

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

Modelos/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"
    }
}

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

Quando testar,Através da arrogância,Digite sua conta e senha para testar。

4 Respostas

  1. Lao Sen Chang Tan Ajuda de TI » Um aplicativo de desktop para modificação de senha do AD escrito em .NET MAUI Blazor (Emparelhado com API da Web) Diz |

    […]   完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,Em seguida, use .NET MAUI Blazor para escrever programas de desktop。Depois de aprender um pouco sobre o Blazor,Eu me sinto tão mágico,É como colocar uma página da web em um aplicativo,Durante a execução, você também pode ver os componentes relacionados ao Edge em execução no "Job Manager",Em seguida, pressione F12 e aparecerá uma janela de ferramentas do desenvolvedor! Mas isso também me deu algumas preocupações de segurança.。Mas o sentimento geral é bastante especial.,Acontece que estou familiarizado com a sintaxe da página da web,Use o Razor para projetar telas de IU,Sentindo-se mais amigável。 […]

  2. Lao Sen Chang Tan Ajuda de TI » Use o ASP.NET Core para escrever uma API Web que permite aos usuários modificar suas senhas do AD Diz |

    […] API para verificar a senha do AD […]

  3. Sean Diz |

    irmão,軟體功力越來越強囉!

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

    Anson Responder |

Deixe um comentário

Por favor, note: Comentário moderação é ativado e pode atrasar o seu comentário. Não há necessidade de reenviar o seu comentário.