ASP.NET Coreμ μΉ μλ² κ΅¬ν
Kestrel
κΈ°λ³Έ νλ«νΌ κ° HTTP μλ² κ΅¬ν
μ΅μμ μ±λ₯κ³Ό λ©λͺ¨λ¦¬ μ¬μ©λ₯ μ μ 곡νμ§λ§ HTTP.sysμ κ³ κΈ κΈ°λ₯ μ€ μΌλΆλ₯Ό μ 곡νμ§ μμ΅λλ€.
- Windows, Linux λ° macOSμμ μ€νλλ νλ«νΌ κ° μΉμλ²
- μΈν°λ·μ ν¬ν¨ν λ€νΈμν¬μ μμ²μ μ§μ μ²λ¦¬νλ μμ§ μλ²λ‘ λ¨λ μ¬μ©
- IIS(μΈν°λ· μ 보 μλΉμ€), Nginx λλ Apache κ°μ μλ°©ν₯ νλ‘μ μλ²μ ν¨κΌ μ¬μ©ν©λλ€. μλ°©ν₯ νλ‘μ μλ²λ μΈν°λ·μμ HTTP μμ²μ λ°μ Kestrelμ μ λ¬
HTTP.sys
μλμ° μ μ© ASP.NET Core μΉ μλ²λ‘ Http.sys, 컀λ λͺ¨λ λλΌμ΄λ²μ κΈ°λ°
- λ΄λΆ λ€νΈμν¬μλ§ λ ΈμΆλλ μ±μλ μ¬μ© κ°λ₯
ASP.NET Coreμ κΆν λΆμ¬
κΆν λΆμ¬λ μ¬μ©μκ° ν μ μλ μμ
μ κ²°μ νλ νλ‘μΈμ€
λ€μμ€νμ΄μ€
AuthorizeAttribute
, AllowAnonymousAttribute
[Authorizae] public class AccountController : Controller { // μΈμ¦λμ§ μμ μ¬μ©μμ κ°λ³ μμ μ λν μ‘μΈμ€ νμ© [AllowAnonymous] public ActionResult Login() {} public ActionResult Logout() {} }
μν κΈ°λ° κΆν λΆμ¬
- μ μΈμ μ΄λ©° μμ²ν 리μμ€μ μ‘μΈμ€νκΈ° μν΄ νμ¬ μ¬μ©μκ° λ©€λ² μ격μ κ°μ ΈμΌ νλ μν μ μ§μ
- νμ΄μ§μ λ°λμ μ μ©λμ΄μΌ νλ©° Razor νμ΄μ§ μ²λ¦¬κΈ° μμ€μμλ μ μ©λ μ μμ΅λλ€.
[Authorize(Roles = "Administrator")] public class AdminstrationController : Controller { public IActionResult Index() => Content("Adminstrator"); }
μ¬λ¬ μν μ μΌνλ‘ κ΅¬λΆλ λͺ©λ‘μΌλ‘ μ§μ κ°λ₯
[Authorize(Roles = "HRManager,Finance")] public class SalaryController : Controller { public IActionResult Payslip() => Content("HRManager || Finance"); }
ν΄λ μ κΈ°λ° κΆν λΆμ¬
- μ μΈμ
- Razor νμ΄μ§, 컨νΈλ‘€λ¬, 컨νΈλ‘€λ¬ λ΄ μμ μ μ μ©
- νμ΄μ§μ λ°λμ μ μ©λμ΄μΌ νλ©° Razor νμ΄μ§ μ²λ¦¬κΈ° μμ€μλ μ μ©λ μ μλ€.
builder.Services.AddAuthorization(options => { options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber")); }); app.UseAuthorization();
μ μ±
μ λΉλ λ° λ±λ‘νκ³ UseAuthorizationμ νΈμΆν©λλ€.
μΌλ°μ μΌλ‘
Program.cs
νμΌμμ μνν¨μ μ± κΈ°λ° κΆν λΆμ¬
μꡬμ¬ν, μꡬμ¬ν μ²λ¦¬κΈ° λ° λ―Έλ¦¬ ꡬμ±λ μ μ±
μ μ¬μ©
builder.Services.AddAuthorization(options => { options.AddPolicy("AtLeast21", policy => policy.Requirements.Add(new MinimumAgeRequirement(21))); }); // AtLeast21" μ μ± μ΄ μμ±, μ΅μ μ°λ Ήμ΄λΌλ νλμ μꡬμ¬ν
IAuthorizationService
public interface IAuthorizationService { Task<AuthorizationResult> AuthorizeAsync(ClaimsPrincipal user, object resource, IEnumerable<IAuthorizationRequirement> requirements); Task<AuthorizationResult> AuthorizeAsync( ClaimsPrincipal user, object resource, string policyName); } public interface IAuthorizationHandler { Task HandleAsync(AuthorizationHandlerContext context); }
IAuthorizationRequirement
λ λ©μλκ° μλ νμ μλΉμ€μ΄λ©° κΆν λΆμ¬κ° μ±κ³΅νλμ§ μ¬λΆλ₯Ό μΆμ νκΈ° μν λ©μ»€λμ¦
IAuthorizationHandler
λ μꡬ μ¬νμ΄ μΆ©μ‘±λλμ§ νμΈνλ μν μ ν©λλ€.
Β