[Security] Spring Security란?
·
Back-End/Security
Spring Security란? 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증, 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 인증과 권한에 대한 부분을 Filter 흐름에 따라 처리한다. 그리고 보안과 관련된 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다.   Architecture사용자는 Form을 통해 로그인 정보를 입력하고 인증 요청을 보낸다.AuthenticationFilter는 HttpServletRequest에서 사용자가 보낸 아이디와 패스워드를 인터셉트해서 넘어온 로그인 정보의 유효성 검사를 한다. HttpSerlvetRequest에서 꺼낸 사용자 정보를 인증용 객체(Userna..
[Security] SpringBoot Security & JWT - JWT(2)
·
Back-End/Security
[작성일: 2023. 09. 22] jwt를 위한 강제 로그인 진행username과 password를 받는 것을 확인하기 위해 JwtAuthenticationFilter 클래스에서 코드를 수정한다. // 로그인 요청을 하면 로그인 시도를 위해 실행되는 함수@Overridepublic Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { System.out.println("JwtAuthenticationFilter : 로그인 시도 중"); // 1. username, password 받아서 try { Bu..
[Security] SpringBoot Security & JWT - JWT(1)
·
Back-End/Security
[작성일: 2023. 09. 21] JWTJWT는 JSON Web Token이라고 불린다. JWT는 당사자간에 정보를 JSON 객체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의하는 개방형 표준이다. 이 정보는 디지털 서명이 되어 있으므로 확인하고 신뢰할 수 있다. JWT는 비밀(HMAC 알고리즘 사용) 또는 RSA를 사용하는 공개/개인 키 쌍을 사용하여 서명할 수 있다. JWT를 암호화해서 당사자간에 비밀을 제공할 수도 있지만 서명 된 토큰에 중점을 둔다. 서명된 토큰은 그 안에 포함 된 클레임(요구사항)의 무결성을 확인할 수 있는 반면 암호화 된 토큰은 다른 당사자로부터 여러한 클레임을 숨긴다.    JSON 웹 토큰 구조 xxxx.yyyy.zzzzHeaderPayloadSignature ..
[Security] SpringBoot Security & JWT - OAuth2.0_Naver
·
Back-End/Security
[작성일: 2023. 09. 19] 네이버 로그인 참고로 나는 페이스북이 가입이 되어있지 않고 사용할 일이 없을 거 같아서 구글과 네이버만 연동하려고 한다.페이스북 연동은 하지 않았지만 필요한 코드는 작성했다. 우선 google은 sub라는 id가 존재하지만 facebook과 naver은 sub가 존재하지 않는다. 그래서 username이 만들어질 때 sub에 null값이 들어가게 된다. 이 문제를 해결하기 위해 provider 클래스와 OAuth2Userinfo 인터페이스, 인터페이스를 구현할 GoogleUserInfo 클래스를 따로 만들어준다. public interface OAuth2UserInfo { String getProviderId(); String getProvider(); ..
[Security] SpringBoot Security & JWT - OAuth2.0_Google
·
Back-End/Security
[작성일: 2023. 09. 17] 구글 로그인우선 구글 OAuth 프로젝트를 만들고 OAuth 동의 화면(외부) ➡️ OAuth 클라이언트 ID 만들기 순서로 진행하면 된다.  승인된 리디렉션 URI에는 다음과 같은 주소를 넣어주면 된다. http://localhost:8080/login/oauth2/code/google 이 주소는 구글 로그인이 완료되고 나면 구글 서버쪽에서 인증이 되었다는 code를 돌려준다. 우리는 이 코드를 받아 access token을 요청할 수 있다. 이 token으로 사용자의 개인 정보에 접근할 수 있는 권한이 생긴다. 이 URI가 있기 때문에 컨트롤러를 따로 만들 필요가 없다.  그 다음 나는 gradle을 사용하기 때문에 gradle.build에 의존성을 추가하고, ym..
[Security] SpringBoot Security & JWT - 스프링 시큐리티
·
Back-End/Security
[작성일: 2023. 09. 16]   Security + JWT로 로그인을 구현한 경험이 있지만 동작되는 원리를 잘 이해하지 못해서 강의를 듣고 블로그에 정리하면서 공부하려고 한다.나중에 다시봐도 이해할 수 있게, 또는 Security에 대해 모르는 누가 봐도 이해할 수 있게 작성하는 것이 목표다. 환경설정강의가 나랑 다른 환경에서 진행되고 있기 때문에 무작정 따라하지 않고 나는 내 환경에 맞춰서 공부를 하려고 한다.    application.ymlthymeleaf로 바꾸면서 필요없을 거 같은 설정은 우선 다 제외했다.그리고 mysql로 되어있던 datasource 부분도 mariadb로 바꿔주었다. spring: datasource: driver-class-name: org.mariadb.j..