Authentication에는 인증된 결과 뿐만 아니라 인증을 하기 위한 정보, 인증을 받기 위한 정보가 하나의 객체에 들어가 있다.
AuthenticationProvider는 입력된 인증을 보고 허가된 인증을 내주는 방식으로 인증 허가를 판단하며 처리 가능한 Authentication에 대해서 알려주는 support메서드를 지원한다.
Authorities에는 '어디를 갈 수 있는지', '어떤 역할을 할 수 있는지'에 대한 권한 정보로 이를 구현(implement)한 GrantedAuthority에 관한 정보들이 저장되어있다.
인가, 권한(Authorization)
- 사용자가 어떤 일을 할 수 있는지 권한 설정하는 절차이다.
- 특정 페이지/리소스에 접근할 수 있는지 권한을 판단한다.
- Secured, PrePostAuthorize 어노테이션으로 쉽게 권한 체크를 할 수 있다.
- 비즈니스 로직이 복잡한 경우 AOP를 이용해 권한 체크를 해야한다.
Authentication에 들어가 있는 Token들은 각각의 Filter들을 통해 발행된 Token들이다.
Credentials은 인증을 받기 위해 필요한 정보들로 대표적인 예시로는 비밀번호가 있다.
Principal은 인증된 결과에 대한 정보이다. credentials를 이용해 인증을 받고 그 결과이다!
Details은 위의 정보 외의 인증에 관여된 주변 정보들을 갖고 있다.
AuthenticationProvider
Authentication을 제공하는 것을 Authentication Provider라고 한다.
Authentication Provider는 credentials나 Principal이 있는 Authentication을 받아서 인증을 하고 인증된 결과를 다시 Authentication객체로 전달하는 역할을 한다.
이때 Authentication Provider는 어떤 인증에 대해 승인을 해줄지 Authentication Manager에게 알려줘야 하기 때문에 support()라는 메서드를 제공합니다.
Authentication Manager은 인증 대상과 방식이 다양할 수 있어 여러개일 수 있습니다.