Java/Spring

Spring boot #6

DGeon 2023. 5. 22. 09:09
  • 4장 인증 백엔드 통합
    • 인증
      • 엑세스 할 수 있는 지 확인하는게 인증 이다
    • 인가
      • 자원을 어디까지 활용 할 것 인지에 대한 정의 이다
    • Basic인증
      • Basic 인증에서 최초 로그인 후 HTTP 요청 헤더 Authorization 아이디와 비밀번호를 콜론으로 이어 붙인 후 Base64로 인코딩한 문자열 함께 보낸다
    • 토큰 기반 인증
      • 최초 로그인 시 서버가 만들어 준다. 클라이언트는 이후 요청에 아이디와 비밀번호 대신 토큰을 계속 넘겨 자신이 인증된 사용자임을 알린다
      • 토큰은 서버가 마음대로 생성할 수 있으므로 사용자가의 인가 정보 또는 유효기간을 정해 관리할 수 있다.
    • JSON웹 토큰
      • JWT 토큰{header}.{payload}.{signature}로 구성 되어 있다.
      • Header
        • typ : type를 줄인 말로써 토큰의 타입을 의미한다
        • alg : algorithm을 줄인 말로써 토큰의 서명을 발행하기 위해 사용된 해시 알고리듬의 종류를 의미한다
      • Payload
        • sub : subject를 줄인 말로 토큰의 주인을 의미 한다
        • iss : issuer의 줄인말 토큰 발급자를 말한다
        • iat : issued at의 줄인말 토큰이 발행된 날짜와 시간을 의미
        • exp : 토큰이 만료되는 시간을 의미한다
      • Signature
        • 토큰을 발행한 주체 issuer가 발행한 서명 토큰의 유효성 검사에 사용된다.
      • JWT에서 전자 서명이란 {header}{payload}와 시크릿 키를 이용해 해시 함수를 돌린 암호화한 결과값이다
    • application.properties각 라인별 단일 구성이다값이 다른 동일한 종류의 속성이있는 경우 배열 인덱스로 List 구조를 나타낼 수 있습니다.버전 2.4.0부터 Spring Boot는 다중 문서 속성 파일 생성을 지원합니다. 간단히 말해, 하나의 실제 파일을 여러 논리 문서로 분할 할 수 있습니다. 이를 통해 선언해야하는 각 프로필에 대한 문서를 모두 동일한 파일에 정의 할 수 있습니다.
    • logging.file.name=myapplication.log bael.property=defaultValue #--- spring.config.activate.on-profile=dev spring.datasource.password=password spring.datasource.url=jdbc:h2:dev spring.datasource.username=SA bael.property=devValue #--- spring.config.activate.on-profile=prod spring.datasource.password=password spring.datasource.url=jdbc:h2:prod spring.datasource.username=prodUser bael.property=prodValue
    • List구조 application.servers[0].ip=127.0.0.1 application.servers[0].path=/path1 application.servers[1].ip=127.0.0.2 application.servers[1].path=/path2 application.servers[2].ip=127.0.0.3 application.servers[2].path=/path3
    • 속성 구성(application.properties 파일) spring.datasource.url=jdbc:h2:dev spring.datasource.username=SA spring.datasource.password=password
    • application.yml(yaml)반복되는 접두사가 포함되지 않으므로 대체 속성 파일보다 더 읽기 쉽습니다.
      logging:
        file:
          name: myapplication.log
      ---
      spring:
        config:
          activate:
            on-profile: staging
        datasource:
          password: 'password'
          url: jdbc:h2:staging
          username: SA
      bael:
        property: stagingValue
      
      속성 파일과 달리 YAML은 설계에 따라 다중 문서 파일을 지원하므로 사용하는 Spring Boot 버전에 관계없이 동일한 파일에 여러 프로필을 저장할 수 있습니다. 그러나 이 경우 사양은 새 문서의 시작을 나타 내기 위해 세 개의 대시를 사용해야 함 을 나타냅니다 .
    • application: servers: - ip: '127.0.0.1' path: '/path1' - ip: '127.0.0.2' path: '/path2' - ip: '127.0.0.3' path: '/path3'
    • datasource: password: password url: jdbc:h2:dev username: SA
    • 정리
      • Rest Security를 구현하기 위한 기본적인 이해 단계이다
    • UserEntity.java
      • Oauth를 이용해 SSO(싱글 사인 온)을 구현하지 않는 다면 password필드는 반드시 null이 되면 안된다. Oauth를 이용하게 되면 비밀번호를 가져올 수 없기 때문에 null이 가능해야 한다
    • 스프링 시큐리티
      • 서블릿 필터의 집합이다
      • 서블릿 필터는 디스패처 서블릿이 실행되기 전에 항상 실행된다
      • FilterChainProxy필터를 서블릿 필터에 끼워 넣어준다
      • FilterChainProxy 클래스 안에는 내부적으로 필터를 실행 시키는데 이 필터들이 스프링이 관리하는 스프링 빈 필터다
      • OncePerRequestFilter 필터를 요청당 한번만 실행 시킨다
      • SecurityContext
        • SecurityContextHolder의 createEmptyContext()메서드를 이용해 생성할 수 있다.
      • 시큐리티 설정
        • 서블릿 필터 구현
        • 서블릿 컨테이너에게 서블릿 필터를 알려주는 설정작업
          • JwtAuthenticationFilter를 사용하라고 알려줘야 한다.
          • Config → WebSecurityConfig클래스를 생성하고 WebSecurityConfigurerAdapter를 상속해서 만든
    • 세션과 토큰
      • 누가 관리하느냐의 차이 정도이다
      • 기능도 같고 제약도 비슷하다
      • 세션은 서버측 방식(JSP) viewPage에서 확인 sec
      • 세션은 CSRF방식을 추가 해야한다.
      • 토큰은 프론트랑 서버를 분리 했기때문에 클라이언트는 토큰정보(JSON)를 가지고 있고
      • 토큰은 리액트와 서버를 분리 하기때문에 사용하는 것이 좋다.
    • XML