인증 : 사용자 신원을 확인하는 행위
인가 : 사용자 권한을 확인하는 행위
웹에서의 인증/인가
인증 : 로그인을 통해 본인임을 확인
인가 : 주로 역할에 따른 사용 권한 관리
HTTP(HyperText Transfer Protocol): 웹 상에서 데이터에 대한 요청과 응답을 주고 받는 규칙
State(상태): 클라이언트(사용자) 측 정보
Stateless
쿠키와 세션 모두 HTTP 에 상태 정보를 유지(Stateful)하기 위해 사용됨
Stateles한 HTTP 방식의 통신에 Stateful 한 요소를 더해 서버에서 클라이언트를 인지할 수 있게 된 것
클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일
구성요소
서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용
서버에서 클라이언트 별로 유일무이한 '세션 ID' 를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장(쿠키는 클라이언트의 브라우저에 저장)
서버에서 생성한 '세션 ID' 는 클라이언트의 쿠키값('세션 쿠키' 라고 부름)으로 저장되어 클라이언트 식별에 사용됨
서버는 세션ID 를 사용하여 세션을 유지합니다.
@Override
public void configure(WebSecurity web) {
// h2-console 사용에 대한 허용 (CSRF, FrameOptions 무시)
web
.ignoring()
.antMatchers("/h2-console/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 회원 관리 처리 API (POST /user/**) 에 대해 CSRF 무시
http.csrf()
.ignoringAntMatchers("/user/**");
패스워드는 반드시 암호화 처리되어 저장되어야함. 지키지 않으면 불법
스프링 시큐리티에서 권고하는 암호화 방법 : BCrypt 해시함수
@Bean
public BCryptPasswordEncoder encodePassword() {
return new BCryptPasswordEncoder();
}
OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준입니다.
사용자가 애플리케이션에게 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할 수 있게 해주는 HTTP 기반의 보안 프로토콜 입니다.