ASP.NET Core के माध्यम से एक सरल AD खाता और पासवर्ड सत्यापन वेब API लिखें

हाल ही में मैंने ASP.NET Core के माध्यम से एक AD खाता पासवर्ड संशोधन प्रोग्राम लिखने का प्रयास किया।,आर्किटेक्चर के संदर्भ में, आमतौर पर AD प्रमाणीकरण और पासवर्ड संशोधन के लिए एक वेब एपीआई होती है।,अंत में, एक डेस्कटॉप एप्लिकेशन लिखें,उपयोगकर्ताओं को इसे स्वयं संशोधित करने दें。इस बार जो पूरा हुआ वह खाता और पासवर्ड सत्यापन के लिए वेब एपीआई है।,कार्यक्रम इस प्रकार है:

"प्रोजेक्ट टेम्पलेट"

  • ASP .NET Core Web API

《NuGet 安裝套件》

  • System.DirectoryServices.Protocols (एडी सुइट)
  • स्वाशबकल.एस्पनेटकोर (एपीआई परीक्षण सुइट,या कोई नया प्रोजेक्ट जोड़ते समय,आप 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; // 驗證失敗
            }
        }
    }
}

नियंत्रक/पासवर्डValidationController.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;
    }
}

ऐप्ससेटिंग्स.जेसन

{
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    },

    "AllowedHosts": "*",

    "LdapSettings": {
        "Server": "dc.abc.com.tw", // 如果是用 Kerberos 驗證,AD 的伺服器不可以使用 IP。
        "Domain": "abc"
    }
}

प्रोग्राम.सी.एस

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. लाओ सेन चांग टैन आईटी सहायता » AD पासवर्ड संशोधन के लिए .NET MAUI ब्लेज़र में लिखा गया एक डेस्कटॉप एप्लिकेशन (वेब एपीआई के साथ जोड़ा गया) कहते हैं |

    […]   完成了《AD 密碼驗證》與《AD 密碼修改》兩個 API 後,इसके बाद, डेस्कटॉप प्रोग्राम लिखने के लिए .NET MAUI ब्लेज़र का उपयोग करें。ब्लेज़र के बारे में थोड़ा जानने के बाद,मैं बहुत जादुई महसूस करता हूं,ऐसा महसूस होता है जैसे किसी एप्लिकेशन में एक वेब पेज डालना,चलाते समय, आप "जॉब मैनेजर" में इसके पीछे एज-संबंधित घटकों को भी देख सकते हैं,फिर F12 दबाएं और एक डेवलपर टूल विंडो होगी! लेकिन इससे मुझे कुछ सुरक्षा संबंधी चिंताएँ भी हुईं।。लेकिन कुल मिलाकर यह अहसास काफी खास है।',मैं वेब पेज सिंटैक्स से परिचित हूं,यूआई स्क्रीन डिज़ाइन करने के लिए रेज़र का उपयोग करें,अधिक मित्रवत महसूस हो रहा है。 […]

  2. लाओ सेन चांग टैन आईटी सहायता » एक वेब एपीआई लिखने के लिए ASP.NET कोर का उपयोग करें जो उपयोगकर्ताओं को अपने AD पासवर्ड को संशोधित करने की अनुमति देता है कहते हैं |

    […] एडी पासवर्ड सत्यापित करने के लिए एपीआई […]

  3. शॉन कहते हैं |

    兄弟軟體功力越來越強囉!

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

    एंसन उत्तर |

एक टिप्पणी छोड़ दो

कृपया ध्यान दें: टिप्पणी मॉडरेशन सक्षम है और अपनी टिप्पणी में देरी हो सकती है. कोई जरूरत नहीं अपनी टिप्पणी को पुनः सबमिट करने की आवश्यकता है.