Develop/Spring40 Spring Webflux - Reactive Programming Ref - https://www.reactivemanifesto.org/ Reactive System ✔ MEANS - Reactive System에서 사용하는 커뮤니케이션 수단이다. Message Driven - 메시지 기반의 통신을 통해 여러 시스템 간에 느슨한 결합을 유지한다. ✔ FORM - 메시지 기반 통신을 통해 리액티브 시스템이 어떤 특성을 가지는 구조로 형성되는지 의미한다. Elastic - 시스템으로 들어오는 요청량에 상관없이 일정한 응답성을 유지하는 것을 의미한다. Resillient - 시스템의 일부분에 장애가 발생하더라도 응답성을 유지하는 것을 의미한다. ✔ VALUE - Reactive System의 핵심 가치가 무엇인지를 표현하는 영역이다. Responsive - 클라이언트의 요.. 2022. 11. 29. OAuth 2 + JWT 샘플 애플리케이션 구현 먼저, 간단한 Frontend와 Backend 간의 OAuth 2 인증 처리 흐름은 다음과 같다. 구글 벤더를 사용하는 OAuth 2를 예시로 자세한 과정을 살펴보자. Resource Owner가 웹 브라우저에서 ‘Google 로그인 링크’를 클릭 Frontend 애플리케이션에서 Backend 애플리케이션의 http://localhost:8080/oauth2/authorization/google로 request를 전송 (이 URI의 requet는 OAuth2LoginAuthenticationFilter가 처리) Google의 로그인 화면을 요청하는 URI로 Redirect 여기서 Authorization Server가 Backend 애플리케이션 쪽으로 Authorization Code를 전송할 Redir.. 2022. 11. 29. OAuth 2 샘플 애플리케이션 구현 // 서버 측에서 HTML을 렌더링해주는 SSR(Sever Side Rendering) 방식의 애플리케이션 구현 - 의존성 추가 dependencies { ... implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' ... } - OAuth 2로 보호되는 .html 파일 생성 (뷰 생성) - 뷰를 리턴하는 Controller를 생성 - application.yml 파일에 .. 2022. 11. 28. OAuth2 개요 OAuth 2 사용자 정보를 보유하고 있는 신뢰할 만한 써드 파티 애플리케이션(GitHub, Google, Facebook 등)에서 사용자의 인증을 대신 처리해주고, Resource에 대한 자격 증명용 토큰을 발급한 후, Client가 해당 토큰을 통해 써드 파티 애플리케이션의 서비스를 사용하게 해주는 방식 사용자의 크리덴셜을 이중으로 관리할 필요가 없음 - 관리하는 크리덴셜이 줄어들기 때문에, 보안성 향상 - OAuth 2에 대해 - https://www.rfc-editor.org/rfc/rfc6749 OAuth 2를 사용하는 애플리케이션 유형 써드 파티 애플리케이션에서 제공하는 API의 직접적인 사용 추가적인 인증 서비스 제공 용도 - 아이디/패스워드 로그인 인증 이외에 OAuth 2를 이용한 로그인.. 2022. 11. 25. JWT - Secret Key를 시스템 환경 변수로 등록할 때 주의점 상황 : JWT 서명에 사용되는 Secret Key 정보는 민감한 정보이기 때문에 시스템 환경 변수의 변수로 등록 - 시스템 환경 변수에 등록한 변수는 application.yml 파일의 Property 명과 동일한 문자열을 사용하지 않도록 주의한다. 만약, 동일한 문자열을 포함하고 있을 때, 정해진 우선 순위에 따라 override되기 때문에, 고려해서 명명을 잘 해주어야할 것 같다. 먼저, Spring Environment에 대해 알아보자. Spring Environment는 애플리케이션에서 사용되는 모든 Property Source를 관리하는 컴포넌트이다. Property Source는 애플리케이션에서 사용되는 key/value 쌍의 property를 포함한다. Spring에서는 OS 환경 변수, .. 2022. 11. 25. Spring Security + JWT 적용 (로그인 인증, 자격 증명, 검증 구현) JWT 적용을 위한 사전 작업 1. 의존 라이브러리 추가 // Spring Security 적용 implementation 'org.springframework.boot:spring-boot-starter-security' // JWT 기능을 위한 jjwt 라이브러리 implementation 'io.jsonwebtoken:jjwt-api:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' runtimeOnly'io.jsonwebtoken:jjwt-jackson:0.11.5' 2. SecurityConfiguration 추가 H2 웹 콘솔을 정상적으로 사용 .frameOptions().sameOrigin() CSRF(Cross-Site Request Forg.. 2022. 11. 25. JWT 개요 JWT(Json Web Token) 데이터를 안전하고 간결하게 전송하기 위해 고안된 토큰 인증 방식 JSON 포맷의 토큰 정보를 인코딩 후, 인코딩된 토큰 정보를 Secret Key로 서명한 메시지를 Web Token으로써 인증 과정에 사용 JWT : https://jwt.io/ JWT 종류 Access Token - 보호된 정보들(사용자의 연락처, 사진 등)에 접근할 수 있는 권한을 부여받는 데에 사용된다. - 비교적 짧은 유효기간 Refresh Token - Access Token의 유효기간이 만료되면, Refresh Token을 사용해 새로운 Access Token을 발급받는다. - 비교적 긴 유효기간 JWT 구조 - header 어떤 종류의 토큰이고 어떤 알고리즘으로 Sign할지 JSON 포맷 형.. 2022. 11. 24. Spring Security에서 지원하는 표현식(Spring EL) hasRole(String role) 현재 보안 주체(principal)가 지정된 역할을 갖고 있는지의 여부를 확인하고, 가지고 있다면 true를 리턴 hasRole(’admin’)처럼 파라미터로 넘긴 role이 ROLE_ 로 시작하지 않으면, 기본적으로 추가 DefaultWebSecurityExpressionHandler의 defaultRolePrefix를 수정하면 커스텀 가능 hasAnyRole(String… roles) 현재 보안 주체가 지정한 역할 중 1개라도 가지고 있으면 true를 리턴 문자열 리스트를 콤마로 구분해서 전달 ex) hasAnyRole(’admin’, ‘user’) hasAuthority(String authority) 현재 보안 주체가 지정한 권한을 갖고 있는지 여부를 확인하고.. 2022. 11. 22. Spring Security 권한 부여 처리 흐름 애플리케이션의 중요한 보안 요소 중 인증에 대한 처리가 되었다면, 권한 부여(Authorization, 인가)에 대한 요소도 체크해야 한다. 인증에 성공한 사용자라도, 주어진 권한 내에서 리소스에 접근할 수 있도록 해야 한다. AuthorizationFilter는 SecurityContextHolder로부터 Authentication을 획득 획득한 Authentication과 HttpServletRequest를 AuthorizationManager에게 전달 RequestMatcherDelegatingAuthorizationManager 내부에 매치되는 AuthorizationManager 구현 클래스가 있으면, 해당 AuthorizationManager 구현 클래스가 사용자의 권한을 체크 적절한 권한일 .. 2022. 11. 22. 이전 1 2 3 4 5 다음