인증은 시스템에 접근하기 위해 회원의 정보를 확인하는 것입니다. 인증은 인가 이전에 완료되며, 보통 회원의 로그인 정보가 필요합니다. 만약 인증이 실패한다면, 클라이언트는 401 UNAUTHORIZED 에러를 응답받습니다.
인증은 내가 누구인지 확인하는 행위이다.
인증은 인가 의사결정의 요소가 될 수 있다.
어떤 개체의 신원을 확인하는 과정이다.
보통 어떤 인증요소를 증거로 자신을 증명한다.
온라인에서는 ID 와 패스워드를 입력하는 행위가 인증이 될 수 있다.
실생활에서는 공공기관에서 신원확인 시 신분증을 보여주는 것을 생각해보면 된다.
여러 개의 절차가 있을 수 있다.
은행의 경우, 본인인증 후 OTP, 보안카드 등의 절차를 추가로 거친다.
2. 인가(Authorization)란?
인가란 특정 리소스에 접근하려는 회원의 권한을 확인하는 것입니다. 인가는 항상 인증 이후에 일어나며, 회원의 권한(privilege)이나 역할(role)이 필요합니다. 만약 인가가 실패한다면, 클라이언트는 403 FORBIDDEN 에러를 응답받습니다.
인가는 내가 권한이 있는지 확인하는 행위이다
어떤 리소스에 접근할 수 있는지, 어떤 동작을 수행할 수 있는지 검증한다.
접근 권한을 얻는 일이다.
현실에서는 비행 시 여권과 함께 가져가는 비행기 티켓을 예로 들 수 있다.
여권으로 신분확인이 되더라도 비행기 티켓이 있어야 비행기에 탈 수 있다.
인터넷 기반 앱에서는 보통 토큰 이라 부르는 것을 사용한다.
유저는 자신의 인가 세부사항을 가진 토큰을 통해 서버에 인증받는다.
서버는 유저의 토큰을 보고 권한이 있는지 판단한다.
3. 권한(Authority)
스프링 시큐리티에서 권한들과 역할은 기본적으로 GrantedAuthority에 저장됩니다. GrantedAuthority는 권한이나 역할의 이름을 반환하는 메소드를 제공합니다.
4. 역할(Role)
권한과 역할의 차이점은 접근 권한을 얼마나 쪼개는 가에 있습니다.
접근 권한을 개별의 특정 행위로 규정할 때 Authority를 사용합니다. 접근 권한을 특정 집단으로 규정할 때 Role을 사용합니다. 쉽게 말해, 접근 권한을 짧게 쪼갤 때 Authority를 사용하며, 길게 쪼갤 때 Role을 사용합니다.
예를 들어 쇼핑몰 사이트가 있을 때 구매 권한, 판매 권한, 좋아요 권한 등 짧게 쪼갤 때 Authority를 사용합니다. 반면, 관리자, 구매자, 판매자와 같이 특정 집단으로 묶어 관리할 때에는 Role을 사용합니다.
접근 권한을 일일히 지정하는 것은 번거롭기 때문에 주로 역할을 사용합니다. 여기서 데이터베이스에 회원의 역할을 정의할 때 유의할 사항이 있습니다. 역할을 정의할 때에는 접두사로 ROLE_로 시작해야 합니다. 가령 ROLE_USER, ROLE_VENDER, ROLE_ADMIN를 예로 들 수 있습니다.