ASP.NET Core를 통해 간단한 AD 계정 및 비밀번호 확인 웹 API 작성

최근에 ASP.NET Core를 통해 AD 계정 비밀번호 수정 프로그램을 작성하려고 했습니다.,아키텍처 측면에서는 일반적으로 AD 인증 및 비밀번호 수정을 위한 Web API가 있습니다.,마지막으로 데스크톱 애플리케이션을 작성합니다.,사용자가 직접 수정하도록 하세요.。이번에 완성된 것은 계정 및 비밀번호 인증을 위한 Web API입니다.,프로그램은 다음과 같습니다:

"프로젝트 템플릿"

  • ASP .NET Core Web API

《NuGet 安裝套件》

  • 시스템.디렉토리서비스.프로토콜 (AD 제품군)
  • 스워시버클.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("驗證失敗。");
        }
    }
}

모델/LoginRequestDTO.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;
    }
}

앱 설정.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 도움말 » .NET MAUI Blazor로 작성된 AD 비밀번호 수정용 데스크톱 애플리케이션 (웹 API와 페어링됨) 라고 |

    […]   完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,다음으로 .NET MAUI Blazor를 사용하여 데스크톱 프로그램을 작성합니다.。Blazor에 대해 조금 배운 후,정말 마법같은 기분이 들어요,웹페이지를 애플리케이션에 넣는 느낌,실행 시 "작업 관리자"에서 그 뒤에 실행되는 Edge 관련 구성 요소도 볼 수 있습니다.,그런 다음 F12를 누르면 개발자 도구 창이 나타납니다! 그러나 이로 인해 보안에 대한 우려도 생겼습니다.。하지만 전체적인 느낌은 꽤 특별합니다.,나는 웹페이지 구문에 익숙하다.,Razor를 사용하여 UI 화면 디자인,좀 더 친근한 느낌。 […]

  2. 라오센창탄 IT 도움말 » ASP.NET Core를 사용하여 사용자가 AD 암호를 수정할 수 있는 웹 API 작성 라고 |

    […] AD 비밀번호 확인을 위한 API […]

  3. 라고 |

    형제,軟體功力越來越強囉!

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

    베어 답글 |

코멘트를 남겨주세요

유의하시기 바랍니다: 덧글 검토가 활성화되고 귀하의 코멘트를 지연시킬 수있다. 댓글을 다시 제출하실 필요는 없습니다.