۳۰ آذر ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

نحوه پیاده سازی احراز هویت در حداقل API ها در ASP.NET Core

از مدیریت بهبود یافته هویت در ASP.NET Core برای اجرای احراز هویت مبتنی بر هویت برای حداقل APIها به سرعت، آسان و با کد کمتر بهره ببرید.

از مدیریت بهبود یافته هویت در ASP.NET Core برای اجرای احراز هویت مبتنی بر هویت برای حداقل APIها به سرعت، آسان و با کد کمتر بهره ببرید.

Minimal API ها در ASP.NET Core به ما اجازه می دهند API های سبک وزن با حداقل وابستگی بسازیم. با این حال، اغلب ما همچنان به احراز هویت و مجوز در حداقل API های خود نیاز داریم. راه های مختلفی برای دستیابی به این امر در ASP.NET Core وجود دارد، از جمله احراز هویت اولیه، احراز هویت مبتنی بر توکن، و احراز هویت مبتنی بر هویت.

ما در اینجا درباره اجرای احراز هویت اولیه در حداقل APIها و احراز هویت مبتنی بر رمز JWT در حداقل APIها اینجا بحث کردیم. در این مقاله بررسی خواهیم کرد که چگونه می توانیم احراز هویت مبتنی بر هویت را برای حداقل API ها در ASP.NET Core پیاده سازی کنیم.

برای استفاده از نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید Visual Studio 2022 را از اینجا دانلود کنید.

یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنید

برای ایجاد یک پروژه ASP.NET Core Web API در Visual Studio 2022، مراحل ذکر شده در زیر را دنبال کنید.

  1. Visual Studio 2022 IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web API” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید. به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست» را علامت بزنید.
  6. بعدی را کلیک کنید.
  7. در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، «.NET 8.0 (Long Term Support)» را به عنوان نسخه فریمورک انتخاب کنید و تیک کادری که می گوید «استفاده از کنترلرها» را بردارید، زیرا ما در این مورد از حداقل API استفاده خواهیم کرد. پروژه.
  8. در جای دیگری از پنجره «اطلاعات اضافی»، «نوع احراز هویت» را روی «هیچ‌کدام» (پیش‌فرض) بگذارید و مطمئن شوید که کادرهای «فعال کردن پشتیبانی باز API»، «پیکربندی برای HTTPS» و «فعال کردن داکر» را انتخاب کنید. ” کنترل نشده باقی بماند. ما در اینجا از هیچ یک از این ویژگی ها استفاده نخواهیم کرد.
  9. روی ایجاد کلیک کنید.
Kubernetes یک مشکل بهینه سازی هزینه (نه) است

ما از این پروژه ASP.NET Core Web API برای کار با نمونه‌های کد ارائه شده در بخش‌های زیر استفاده خواهیم کرد.

مدیریت هویت در ASP.NET Core

ASP.NET Core دارای یک ویژگی قدرتمند به نام مدیریت هویت است که در NET 8 بهبود یافته است. چارچوب هویت داخلی در ASP.NET Core میان‌افزار لازم را برای اجرای احراز هویت، مدیریت کاربر، و مجوز مبتنی بر نقش فراهم می‌کند، در نتیجه اجرای مکانیزم‌های احراز هویت قوی و ایمن در برنامه شما را ساده‌تر می‌کند.

فریم‌ورک هویت ASP.NET Core با پشتیبانی از ویژگی‌های کلیدی زیر قابل توسعه و سفارشی‌سازی است:

  • تأیید هویت و مجوز
  • مدیریت کاربر
  • مدیریت نقش‌ها
  • هش رمز عبور
  • احراز هویت مبتنی بر رمز
  • احراز هویت مبتنی بر ادعا

یک API حداقل در ASP.NET Core ایجاد کنید

در پروژه Web API که در بالا ایجاد کردیم، کد تولید شده را با کد زیر جایگزین کنید تا یک حداقل API اساسی ایجاد کنید.

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/helloworld", () => "Hello, World!");
app.Run();

هنگامی که برنامه را اجرا می کنید، متن “Hello World!” در مرورگر وب شما نمایش داده خواهد شد. بعداً در این مقاله از این نقطه پایانی استفاده خواهیم کرد.

مایکروسافت از پیشرفت های زبان C# 12 رونمایی کرد

بسته های NuGet را نصب کنید

برای افزودن پشتیبانی از چارچوب هویت داخلی در ASP.NET Core، پروژه را در پنجره Solution Explorer انتخاب کنید، سپس کلیک راست کرده و “Manage NuGet Packages” را انتخاب کنید. در پنجره NuGet Package Manager، بسته های Microsoft.AspNetCore.Identity.EntityFrameworkCore، Microsoft.EntityFrameworkCore.SqlServer و Microsoft.EntityFrameworkCore.Design را جستجو کرده و آنها را نصب کنید.

از طرف دیگر، می‌توانید بسته‌ها را از طریق کنسول NuGet Package Manager با وارد کردن دستورات فهرست شده در زیر نصب کنید.

PM> Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer
PM> Install-Package Microsoft.EntityFrameworkCore.Design

یک DbContext جدید در EF Core ایجاد کنید

ما در این مثال از Entity Framework Core استفاده خواهیم کرد. DbContext یک جزء جدایی ناپذیر از EF Core است که یک جلسه اتصال با پایگاه داده را نشان می دهد. در مرحله بعد، با گسترش کلاس IdentityDbContext همانطور که در قطعه کد زیر نشان داده شده است، یک کلاس DbContext سفارشی ایجاد کنید.

public class CustomDbContext(DbContextOptions<CustomDbContext> options)
    : IdentityDbContext<IdentityUser>(options){ } 

شما باید کلاس DbContext سفارشی را با قرار دادن خط کد زیر در فایل Program.cs ثبت کنید.

builder.Services.AddDbContext<CustomDbContext>();

احراز هویت و مجوز را در ASP.NET Core فعال کنید

احراز هویت فرآیندی است برای تعیین هویت کاربر و تأیید هویت کاربر. همانطور که در قطعه کد زیر نشان داده شده است، می‌توانید با استفاده از روش AddAuthentication() احراز هویت را در یک API حداقل در ASP.NET Core فعال کنید.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication();

ما از مجوز برای محدود کردن دسترسی به منابع خاصی در یک برنامه استفاده می‌کنیم. با استفاده از کد زیر می توانید مجوز را در حداقل API خود فعال کنید.

builder.Services.AddAuthorization();

روش AddAuthorization برای ثبت خدمات مجوز در کانتینر خدمات استفاده می شود تا در صورت نیاز بتوانید قوانینی را برای فعال یا غیرفعال کردن دسترسی به منابع برنامه تعریف کنید.

نظرسنجی CNCF: Kubernetes مدیریت شده به یک هنجار تبدیل می شود

خدمات و نقاط پایانی API را در ASP.NET Core پیکربندی کنید

کار بعدی که باید انجام دهیم این است که هویت و خدمات EF Core و نقاط پایانی API را پیکربندی کنیم. برای انجام این کار، لیست کد ارائه شده در زیر را در فایل Program.cs قرار دهید.

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
builder.Services.AddDbContext<CustomDbContext>();
builder.Services.AddAuthorization();
builder.Services.AddIdentityApiEndpoints<IdentityUser>()
    .AddEntityFrameworkStores<CustomDbContext>();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.MapIdentityApi<IdentityUser>();

متد AddIdentityApiEndpoints() در قطعه کد قبلی، کنترلرها و خدمات لازم را برای احراز هویت و مجوز (ورود به سیستم، خروج از سیستم، ثبت نام و غیره) اضافه می کند. توجه داشته باشید که این یک روش جدید است (معرفی شده در .NET 8) که برای پیکربندی ادغام هویت در یک برنامه استفاده می شود. متد AddIdentityApiEndpoints() نمونه ای از نوع IdentityUser را به عنوان پارامتر می پذیرد که برای تعیین نوع کاربر استفاده می شود.

می‌توانید از کد زیر برای اضافه کردن مجوز برای نقطه پایانی /helloworld استفاده کنید.

app.MapGet("/helloworld", () => "Hello World!")
.RequireAuthorization();

منبع کامل فایل Program.cs

کد منبع کامل فایل Program.cs برای مرجع شما در زیر آورده شده است.

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddDbContext<CustomDbContext>();
builder.Services.AddAuthorization();
builder.Services.AddIdentityApiEndpoints<IdentityUser>()
    .AddEntityFrameworkStores<CustomDbContext>();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.MapIdentityApi<IdentityUser>();
// Configure the HTTP request pipeline.
app.MapGet("/helloworld", () => "Hello World!")
.RequireAuthorization();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
});
app.Run();
public class CustomDbContext(DbContextOptions<CustomDbContext> options)
    : IdentityDbContext<IdentityUser>(options)
{
    protected override void OnConfiguring(DbContextOptionsBuilder options) =>
    options.UseSqlite("DataSource = DemoDb; Cache=Shared");
}

ویژگی مدیریت هویت یکپارچه در ASP.NET Core هم قدرتمند است و هم استفاده از آن آسان است. پیشرفت‌ها در .NET 8 با یک Identity API بهبودیافته، Identity را قوی‌تر و انعطاف‌پذیرتر کرده است، که به شما امکان می‌دهد تا احراز هویت و مجوز مبتنی بر هویت را آسان‌تر و کارآمدتر با کد کمتر اجرا کنید.