Spring Security | Spring Security이란? | 인증(Authentication), 권한 부여(Authorization)
인증(Authentication)이란?
인증(authentication)은 자신이 누구라고 주장하는 사람을 확인하는 절차이다. 클라이언트가 자신이 주장하는 사용자와 같은 사용자인지를 확인하는 과정이다.
인증의 종류는 아래와 같다.
- 크리덴셜(Credential:자격) 기반 인증
- 우리가 웹에서 사용하는 대부분의 인증 방식은 크리덴션 기반의 인증 방식이다.
- 즉, 권한을 부여받는데 1차례의 인증과정이 필요하며 대개 사용자명과 비밀번호를 입력받아 입력한 비밀번호가 저장된 비밀번호와 일치하는지 확인한다.
- 일반적으로 스프링 시큐리티에서는 아이디를 프린시플(principle), 비밀번호를 크리덴셜(credential)이라고 부르기도 한다.
- 이중 인증(Two-factor authentication)
- 한번에 2가지 방식으로 인증을 받는 것을 말한다.
- 예를 들어, 금융, 은행 웹어플리케이션을 이용해 온라인 거래를 하실 때에는 로그인과 보안 인증서, 2가지 방법으로 인증을 받곤 한다.
- 별 것 아닌 것 같지만 Authentication이 하나 추가됨으로서 프로그래밍 적으로 변화해야 할 부분은 상당히 광범위해진다.
- 물리적인 인증
- 이 부분은 웹의 영역을 벗어난 것이지만 가장 효과적인 보안 수단 중에 하나이다.
- 예를 들어, 컴퓨터를 킬 때 지문을 인식받는다거나 키를 삽입해야 하는 것들 말한다.
권한 부여(Authorization)란?
- 권한 부여(authorization)는 가고 싶은 곳으로 가도록 혹은 원하는 정보를 얻도록 허용하는 과정이다.
- 클라이언트가 하고자 하는 작업이 해당 클라이언트에게 허가된 작업인지를 확인하는 과정이다.
권한의 종류는 크게 2개로 나눌 수 있다.
- 부여된 권한(Granted Autority)
- 적절한 절차로 사용자가 인증되었다면 권한을 부여(Granted Authority)해야 할 것이다.
- 회원가입 등을 통해 반영구적인 권한이 부여됬다면 우리는 이 회원에게 부여된 권한을 어딘가에 저장해야 한다.
- 만약 해당 사용자가 로그인을 했는데 메인 페이지로 넘어갈 수 없다면 권한부여에 문제가 있다는 것이다.
- 리소스의 권한(Intercept)
- 사용자의 권한만 있다고 보안이 제대로 동작할리는 없다. 보안이란 본래 권한이 없는 자들이 원천적으로 리소스에 접근할 수 없도록 막아내는 것이기 때문이다.
- 그런 의미에서 적절한 권한을 가진자만 해당 자원에 접근할 수 있도록 자원의 외부요청을 원천적으로 가로채는 것(Intercept)이 웹보안, 그 중 권한부여(Authorization)의 핵심 원칙이라 할 수 있겠다.
인증과 인가의 차이점
- 인증(Authentication)과 권한 부여(Authorization)은 간혹 이해가 어려울 수 있을 것이다.
- 인증을 거친 후 인증된 사용자에 대한 특정한 권한을 부여 한다고 생각 한다면 쉽게 이해 될 수 있을 것이다.
- 예를 들면 ACL(Access Control List) 처럼 사용자가 접근 후 어떠한 레벨이야 따라 인증 후 접근을 할 수 있는 부분이 제한 되게 구성 할 수 있을 것이다.
최종 수정 : 2022-12-12