ASP.NET Core - 단순 쿠키 인증 작성

다음은 ASP.NET ID를 사용하지 않고 쿠키 인증을 작성하는 방법에 대한 빠른 가이드입니다.

  • 인증 서비스를 추가하고 HttpContextAccessor .

    builder.Services.AddAuthentication("MyAuthScheme")
        .AddCookie("MyAuthScheme", options => {
            options.LoginPath = "/Login";
            options.LogoutPath = "/Logout";        
            options.AccessDeniedPath = "/AccessDenied";
        });
    
    builder.Services.AddHttpContextAccessor();
    
    "MyAuthScheme"가 전체적으로 사용됩니다.

  • HTTP 요청 파이프라인을 구성합니다.

    app.UseAuthentication();
    app.UseAuthorization();
    
    app.MapRazorPages();
    app.MapControllers();
    


  • 로그인 페이지에서 다음을 추가하십시오.

    using Microsoft.AspNetCore.Authentication;
    using Microsoft.AspNetCore.Authorization;
    using System.Security.Claims;
    

    로그인 페이지 생성자에서 다음과 같이 _httpContextAccessor를 삽입합니다.

    private readonly IHttpContextAccessor _httpContextAccessor;
    public Login(IHttpContextAccessor httpContextAccessor){ 
        _httpContextAccessor = httpContextAccessor;
    }
    

    실제 로그인:

    // Validate login credentials here and get user details.
    
    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.NameIdentifier, user.Id),
        new Claim(ClaimTypes.Name, user.Username),
        new Claim(ClaimTypes.Email, user.Email)
        // add or remove claims as necessary    
    };
    
    var claimsIdentity = new ClaimsIdentity(claims, "MyAuthScheme");
    
    await _httpContextAccessor.HttpContext
        .SignInAsync("MyAuthScheme",
            new ClaimsPrincipal(claimsIdentity),
            new AuthenticationProperties());
    
    // Redirect here
    

    이 코드는 이름이 .AspNetCore.MyAuthScheme 인 쿠키를 생성합니다.

  • 로그아웃 코드:

    await _httpContextAccessor.HttpContext
                .SignOutAsync("MyAuthScheme");
    
    // Redirect to login or other page
    

    이렇게 하면 쿠키가 제거됩니다.AspNetCore.MyAuthScheme.

  • 이제 인증된 사용자가 필요한 페이지에 [Authorize]를 넣을 수 있습니다. 수동으로 확인하거나 Controller 또는 Razor 페이지에서 클레임에 액세스하려면:

    if(User.Identity.IsAuthenticated) {
    
        var username = User.Identity.Name;
        var email = User.Claims.Where(i => i.Type == "Email").FirstOrDefault().Value;
    }
    
    .cshtml에 액세스하려면:

    @if(User.Identity.IsAuthenticated) {
        <p>@User.Identity.Name</p>
        <p>@User.Claims.Where(i => i.Type == "Email").FirstOrDefault().Value</p>
    }
    

    웹 사이트의 다른 부분에서 주입IHttpContextAccessor:

    if(_httpContextAccessor.HttpContext
        .User.Identity.IsAuthenticated) {
        //do something
    }
    


  • 자원



    Microsoft Docs

    좋은 웹페이지 즐겨찾기