ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring boot #6
    Java/Spring 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

    'Java > Spring' 카테고리의 다른 글

    Spring boot #7  (0) 2023.05.23
    Spring boot #5  (0) 2023.05.18
    Spring boot #3  (0) 2023.05.16
    Spring #28  (0) 2023.05.01
    Spring #27  (0) 2023.05.01
Designed by Tistory.