Spring 심화 2주차
웹의 인증 및 인가
- 인증(Authentication): 사용자 신원을 확인하는 행위
- 인가(Authorization): 사용자 권한을 확인하는 행위
- 웹에서의 인증 및 인가
- 인증: 로그인을 통해 본인임을 확인(주로, 아이디와 패스워드 이용)
- 인가: 주로 역할에 따른 사용 권한 관리
쿠키와 세션
-
쿠키와 세션이 필요한 이유
- 클라이언트와 서버가 통신을 할 때, API 요청을 보내는데 이때 HTTP 통신규약을 따르도록 되어있다.
- 이 HTTP는 사용자를 구별하지 않는다. 즉, 상태를 저장하지 않는다(Stateless).
- 이 HTTP에서 상태를 구분하기 위해 쿠키와 세션이 필요하다. 쿠키와 세션 모두 HTTP에 상태 정보를 유지(Stateful)하기 위해 사용된다. 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 된다.
-
쿠키
- 클라이언트에 저장될 목적으로 새성한 작은 정보를 담은 파일
- 웹 브라우저에 저장됨
-
세션
- 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용(서버에 저장됨)
- 서버에서 클라이언트 별로 유일무이한 '세션ID'를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장
- 서버에서 생성한 '세션ID'는 클라이언트의 쿠키값(세션 쿠키)으로 저장되어 클라이언트 식별에 사용됨
- 세션 동작 방식
-
쿠키와 세션 비교
'스프링 시큐리티' 프레임워크
- '스프링 시큐리티' 프레임워크: 스프링 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해 줌으로써 개발의 수고를 덜어준다.
- '스프링 시큐리티' 프레임워크 추가: build.gradle에 해당 코드 추가
// 스프링 시큐리티
implementation 'org.springframework.boot:spring-boot-starter-security'
// Thymeleaf (뷰 템플릿 엔진)
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
- '스프링 시큐리티' 활성화: WebSecurityConfig.java 파일 추가
package com.sparta.springcore.security;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity // 스프링 Security 지원을 가능하게 함
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.headers().frameOptions().disable();
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.permitAll();
}
}
- 해당 코드를 추가함으로써 자동으로 로그인페이지가 만들어진다. 아이디는 user, 비밀번호는 콘솔에 찍혀있는 제공되는 비밀번호로 로그인 가능하다.
회원 가입 기능 구현
- DB에 저장할 회원정보 Entity 설계
- 패스워드 암호화 구현
- 해시함수를 통해 암호화된 형태로 패스워드 저장
- '일방향' 암호 알고리즘을 사용했기 때문에, 복호화 불가능
- 스프링 시큐리티에서 제공해주고 있는 'BCrypt' 해시 함수를 사용
@Bean
public BCryptPasswordEncoder encodePassword() {
return new BCryptPasswordEncoder();
}
로그인, 로그아웃 기능 구현
-
스프링 시큐리티를 이용한 로그인 처리 구현
-
로그인 처리 과정: 인증/인가 성공 시에만, Controller에게 회원 정보 전달
Author And Source
이 문제에 관하여(Spring 심화 2주차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@idoburnish/Spring-심화-2주차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)