Spring 심화 2주차

Doyoon Lee·2021년 9월 14일
0

Spring

목록 보기
7/7

웹의 인증 및 인가

  • 인증(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에게 회원 정보 전달

0개의 댓글