ASP.NET Core 인증 과정 을 깊이 해석 하여 실현

4173 단어 ASP.NETCore인증
긴 말 하지 않 겠 습 니 다.앞에서 우 리 는 ASP.NET Core 가 성명 을 바탕 으로 하 는 방문 통 제 는 도대체 무슨 귀신 입 니까?
오늘 우 리 는 승승장구 하 며 ASP.NET Core 의 인증 에 대해 이야기 합 시다.
인증 은 사용자 의 신분 을 확인 하 는 과정 이다.권한 수 여 는 사용자 가 자원 에 접근 할 권리 가 있 는 지 확인 하 는 과정 이다.
1.아무리 변해 도 근본 을 떠 나 지 않 는 다
일반적인 신분 인증 사례 는 두 부분 을 포함한다.
① 사용자 인증
② 인증 되 지 않 은 사용자 가 제 한 된 자원 에 접근 하려 고 할 때 반응 한다.
등 록 된 인증 처리 프로그램 과 설정 옵션 을'방안'이 라 고 부 릅 니 다.방안 은 사용자 가 관련 처리 프로그램의 인증,도전 과 금지 행 위 를 참고 할 수 있 도록 메커니즘 으로 사용 할 수 있 습 니 다.
우리 가 말 하 는 것 은
쿠키 인증 방안 을 바탕 으로 인증 에 성공 하면 go on,인증 에 실패 하면 로그 인 페이지 로 이동 합 니 다.
기본 인증(BA)방안 을 기반 으로 인증 에 성공 하면 go on,인증 에 실패 하면 브 라 우 저 에 WWW-Authenticate 레이 블 을 되 돌려 주 고 브 라 우 저 는 인증 창 을 다시 팝 업 합 니 다.
2.ASP.NET 코어 인증 원리
ASP.NET Core 에서 인증 은 IAuthenticationService 가 담당 하고 인증 서 비 스 는 등 록 된 인증 처리 프로그램 을 호출 하여 인증 과 관련 된 작업 을 수행 하 며 전체 검증 과정 은 인증 미들웨어 로 연결된다.
그 중 에는 몇 가지 중요 한 절차 가 있다.
1.인증 처리 절차
프로젝트 Scheme 의 설정 항목 AuthenticationSchemeOptions 와 결합 하여 인증 처리 프로그램 을 작성 할 수 있 습 니 다.
쿠키 기반 인증 방안 은 Options 항목 에서 로그 인 주 소 를 지정 할 수 있 습 니 다.
기본 신분 기반 인증 방안 은 Options 항목 에서 사용자 이름/비밀 번 호 를 지정 할 수 있 습 니 다.
2.인증 절 차 는 AuthenticationHandler 류 또는 IAuthenticationHandler 인터페이스 에서 계승 합 니 다.
핵심 인증 함 수 는 성명 의 접근 통 제 를 바탕 으로 Claims Principal,Scheme 에 연 결 된 AuthenticationTicket 대상 을 생 성 할 수 있 습 니 다.인증 성공/실 패 를 막론하고 함 수 는 AuthenticatereResult 대상 으로 돌아 갑 니 다.
도전(인증 되 지 않 은 사용자 에 대한 반응):예 를 들 어 로그 인 페이지 로 돌아 가기
인증 되 었 으 나 특정 자원 에 접근 할 수 없 는 반응 을 금지 합 니 다.예 를 들 어 알림 문자열 을 되 돌려 줍 니 다.
이상 은 모두 서비스 등록 과정 입 니 다.
요청 을 받 았 습 니 다.인증 미들웨어 는 IAuthenticationService 를 사용 하여 HttpContext 가 요구 하 는 scheme 에 따라 인증 하고 실제 내부 에 서 는 두 번 째 로 작 성 된 인증 처리 프로그램 을 호출 합 니 다.
이상 의 인증 원 리 는 이전에 근접 실전 이 있 었 다.ASP.NET Core 는 기본 인증 을 실현 했다.
소스 코드 는 다음 과 같 습 니 다.
3.ASP.NET Core 에서 현재 사용자 가 져 오기
성명 에 기반 한 접근 제 어 는 HttpContext.User 속성 에 신분 정 보 를 저장 합 니 다.

 var claims = new[] {
        new Claim(ClaimTypes.NameIdentifier,username),
        new Claim(ClaimTypes.Name,username),
      };
 var identity = new ClaimsIdentity(claims, Scheme.Name);
 var principal = new ClaimsPrincipal(identity);
 Context.User = principal;
웹 프로그램 에서 현재 로그 인 사용 자 를 가 져 옵 니 다.두 가지 코드 가 있 습 니 다.
3.1 컨트롤 러 에서 현재 로그 인 사용 자 를 가 져 오기
컨트롤 러 는 요청 을 처리 하 는 1 등 시민 으로 타고 난 HttpContext 입 니 다.
Controller Base 기본 클래스 에 포 함 된 HttpContext 속성 을 통 해 User 대상 을 직접 가 져 옵 니 다.
실제로 Razor Page,Razor View,Middleware 는 모두 HttpContext 속성/인 자 를 포함 하여 직접 사용 할 수 있 습 니 다.
3.2 서비스 에서 현재 로그 인 사용 자 를 가 져 옵 니 다.
이때 서 비 스 는 요청 처리 의 한 부분 으로 HttpContext 를 직접 사용 할 수 없습니다.
ASP.NET Core 는 IHttpContextAccessor 클래스 를 제공 하여 이번 요청 의 HttpContext 대상(주입 프레임 에 의존 하 는 역할)을 주입 할 수 있 습 니 다.

//         ,          ,  IHttpContextAccessor  httpContext
public class UserEntityService : IUserEntityService
{
  private IHttpContextAccessor _accessor;
  private readonly IMongoCollection<UserProfile> _users;

  public UserEntityService(IHttpContextAccessor accessor, IDefaultMongoDatabaseProvider databaseProvider)
  {
    _accessor = accessor;
    _users = databaseProvider.GetCollection<UserProfile>(CollectionNames.UserProfiles);
  }

  public Task<UserProfile> GetCurrentUserAsync()
  {
    var rawUser = this._accessor.HttpContext.User();
    if (rawUser == null)
    {
     return null;
    }
    var filter = Builders<UserProfile>.Filter.Eq("UserId", rawUser.UserId);
   return _users.Find(filter).FirstOrDefaultAsync();
  }
}

저 희 는 상기 코드 장 소 를 구분 할 필요 가 없습니다.Controller 나 Application 서비스 에서 ICurrentUser 인 터 페 이 스 를 사용 하여 로그 인 사용 자 를 받 을 수 있 습 니 다.
방백
개인 적 으로 ASP.NET Core 인증 의 소스 코드 는 현실 적 인 인식 을 바탕 으로 추출 되 었 고 우 리 는 프레임 코드 의 간결 하고 세련 되 며 차원 이 뚜렷 하 다 는 것 에 경탄 했다.
성명 을 바탕 으로 하 는 접근 제어 가 표준 이 되 었 고 ASP.NET Core/bp vnext 는 모두 완벽 한 지원 을 제공 합 니 다.
ASP.NET Core 의 인증 과정 을 깊이 있 게 해석 하여 실현 하 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 ASP.NET Core 인증 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기