java 93

SpringbootSecurity/JWT Filter 등록 테스트

이번 포스팅은 저번 포스팅과 연결된 포스팅입니다. 이번 포스팅에서는 저번에 작업하던 JWT서버 만드는 프로젝트에서 필터를 하나 만들어 보겠습니다. MyFilter1이라는 클래스를 만들어서 아래와 같이 필터의 역할을 하는 파일을 만들었다. 그리고 SecurityConfig에서 Security설정을 위와 같이 해주는 방법도 있지만 굳이 그렇게 하는 것보다 좀 더 효율적인 방법이 있다. 필터 설정을 해주는 클래스를 하나 더 만드는 것이다. 위와 같이 등록돼있으면 필터가 잘 작동한다. setOrder는 필터가 실행되는 순서를 설정하는 것이다. 위와 같이 하나의 필터를 더 만들어서 실행을 해보면 setOrder의 설정 순서대로 작동하는 것을 알 수 있다. 그럼 위와 같은 방식의 filter와 SecurityCon..

SpringbootSecurity 2021.09.28

SpringbootSecurity/JWT Bearer 인증방식

JWT Bearer인증방식에 대해서 포스팅을 하겠습니다. 본 포스팅은 저번 포스팅과 연결돼있습니다. http.csrf.disable설정의 의미는 기본적으로 웹서버에서는 자바스크립트의 공격을 방어하기 위해서 크로스 오리진정첵을 운영하고 있는데 그 설정을 없앤다는 것이다. 바로 밑에 http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 는 Stateless를 사용한다는 것은 session을 사용하지 않겠다는 것이다. 기본적인 웹은 stateless를 사용하는데 statfull처럼 느껴지도록 session과 cookie를 사용하는데 jwt서버는 session을 사용하지 않기 때문에 사용하지 않도록 설정해 준 것이다. fo..

SpringbootSecurity 2021.09.23

SpringbootSecurity/JWT를 위한 Security설정

지금 현제 하고 있는 프로젝트는 Security를 기반으로 만들어졌기 때문에 JWT를 위한 Security설정을 해보겠다. 모델을 하나 만든다. 이제 yml설정에서 create로 바꿔주고 db에 테이블을 하나 만들면 된다. Security설정 기본적으로 Seicurity설정은 다음과 같이 해준다. 그리고 몇가지 설정을 추가적으로 더 해줘야 한다. 서버 설정 추가 corsFilter는 SpringFramwork가 들고 있는 함수를 사용한다. /api/로 들어오는 모든 주소는 이 config설정을 따라라고 설정을 해주고 return 해준다. 그리고 위와 같이 걸기만 하면 의미가 없고 filter에 등록을 해줘야 한다. 다시 SecurityConfig클래스로 가서 Security설정을 만져 준다. 이렇게 시큐..

SpringbootSecurity 2021.09.07

SpringbootSecurity/JWT구조에 대한 이해

https://jwt.io/ JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt.io 저번 포스팅에선 RFC문서가 뭔지에 대해서 이해를 했으니 이제 JWT가 뭔지 자세히 알아보자. JSON웹 토큰이란?(JWT) JSON웹 토큰은 JSON객체로 안전하게 정보를 전송하기 위한 방식이다. 이 정보는 디지털 서명이 되어 있으므로 신뢰할 수 있다. JWT는 HMAC알고리즘 또는 RSA를 사용한다. JWT를 암호화하여 당사자간에 비밀을 제공 할 수도 있지만 이 JWT의 핵심은 서명된 토큰에 중점을 둔 것이다. 즉 서명의 용도로 사용을 하는 ..

SpringbootSecurity 2021.09.04

SpringbootSecurity/Springboot로 네이버 로그인 해보기 (yml에서 provider 설정하기)

저번 포스팅에서 이어갑니다. provider OAuth2-Client라는 라이브러리를 사용하고 있는데 OAuthClient를 재공해 주는 provider 있는데 Spring은 구글, 페이스북, 트위터 등등을 제공해준다. 그럼 당연히 네이버나 카카오같은 각 나라마다의 포털사이트를 Spring을 다 제공해주기엔 너무 많기 때문에 대표적인 것만 있는 것이다. 그럼 이런 각 나라마다 포털사이트의 api를 사용하려면 그 포털사이트의 문서를 봐야 사용할 수 있다. 그럼 naverAPI를 받아오기 전에 yml설정부터 하면서 이해해야할 개념이 있다. 기본적으로 스프링 시큐리티가 OAuth2로그인을 사용할 때 OAuth2를 사용하기 위한 여러 가지 방식이 있다. Code방식 Client CredentialGrantTyp..

SpringbootSecurity 2021.09.01

SpringbootSecurity/Springboot로 페이스북 로그인 해보기

https://developers.facebook.com/?locale=ko_KR Facebook for Developers iOS 14에 대비한 파트너 준비 사항: Facebook 광고에 영향을 미칠 Apple iOS 14 요구 사항에 대해 자세히 알아보세요. FACEBOOK으로 빌드하기 Facebook의 추천 플랫폼으로 고객과 소통하고 효율을 높여보세요 developers.facebook.com 위 사이트에 들어가서 로그인을 한다. 로그인하면 상단 해더에 '내 앱'이라는 카테고리가 있는데 거기로 들어가서 앱을 아래와 같이 만든다. 시작하기 전에 기본적인 oauth로그인에 대한 코드나 내용은 이전 포스팅인 구글로그인편을 해 보고 오셔야 해당 포스팅을 이해하실 수 있습니다. 앱을 만들고 로그인 기능을 추..

SpringbootSecurity 2021.08.31

SpringbootSecurity/Springboot로 구글로그인 해보기(3)/구글 로그인 및 자동 회원가입 진행 완료

저번 포스팅에서 이어집니다. PrincpalDetails를 만든 이유는 Authentication객체에 일반 로그인을 했을 경우의 타입과 oauth를 사용해서 로그인한 경우의 타입 이 두 가지 타입을 일치시키기 위해서이다. 그럼 이제 회원 oauth 회원가입을 해보자 회원가입 여기서 attributes가 가지고 있는 정보는 아래와 같다. getAttributes {sub=105617652356040885552, name=, given_name=, family_name= , picture=https://lh3.googleuserconent.com/a/AATXAJzvxBp9CVwqOqPeThYDMDJvNPxhu , email=@gmail.com , email_verified=true , locale=ko} ..

SpringbootSecurity 2021.08.29

SpringbootSecurity/Springboot로 구글로그인 해보기(3)/Authentication객체가 가질 수 있는 2가지 타입

위 받은 정보들을 분석해 보면 registrationId로 어떤 OAuth로 로그인했는지 확인이 가능하다. Authentication객체 테스트 Authentication 를 DI(의존성 주입) 하면 Authentication객체안에 principal이 있고 이 객체는 return타입은 Object이기 때문에 user정보를 다운 캐스팅해서 호출을 하면 user의 정보를 볼 수 있다. @AuthenticationPrincipal을 통해서 세션정보에 접근할 수 있다. 즉 userDetails에 접근을 할 수 있게 된다는 얘기이다. 하지만 UserDetails타입을 가지고 있다 그렇기 때문에 아래와 같이 수정하면 user오브젝트를 받을 수 있게 된다. 그럼 이번엔 구글로 로그인하면 어떻게 되는지 확인해 보자...

SpringbootSecurity 2021.08.29

SpringbootSecurity/Springboot로 구글로그인 해보기(2)/구글 회원 프로필 정보

저번 포스팅에서 이어갑니다. 이제 구글 로그인까지는 완료했는데 후처리가 필요하다. 구글 로그인 후처리 일반적으로 구글이 구글을 완료하면 어떻게 처리가 되는지 알아야 한다. 일단 로그인을 하게 되면 1. 코드 받기(인증) 2. 액세스 토큰(권한) 3. 권한을 통해서 사용자 프로필 정보를 가져온다. 4-1. 그 정보를 토대로 회원가입을 자동으로 진행시키기도 한다. 4-2. 예를 들어 쇼핑몰을 한다고 하면 기본적인 USER정보와 더해서 추가적인 집주소, 백화점몰->(VIP 등급, 일반등급)이 필요하다. TIP 구글 로그인이 완료가 되면 코드를 받는 것이 아니다. 무엇을 받냐면 액세스 토큰+사용자 프로필 정보까지 한 번에 다 받을 수 있다. Oauth2 clinet라이브러리에서 제공해주는 기능 일단 config..

SpringbootSecurity 2021.08.29

SpringbootSecurity/Springboot로 구글로그인 해보기(1)/구글 로그인 준비(설정)

이론적인 부분은 전 Security version.1에 서 다 설명돼있습니다. 구글 googleapi로 들어간다 새 프로젝트를 만든다 만든 프로젝트를 선택한 후에 OAuth동의 화면으로 간다 앱 이름 설정하고 Oauth 동의한 후에 사용자 인증 정보로 이동한다. 위와 같은 경로로 들어간다. 승인된 리다이렉션 URI 구글 로그인을 완료가 되고 나면 구글 서버 쪽에서 우리 쪽으로 코드를 돌려준다. 그럼 우리는 이 코드를 받아서 다시 코드를 통해서 액세스 토큰을 요청을 한다. 이 액세스 토큰을 받아서 이 엑세스토큰으로 우리가 사용자 대신에 우리서버가 구글서버에 사용자의 개인정보같은 민감한정보에 접근할 수 있는 권한이 생긴다. 이때 엑세스토큰을 얻기 위해서 필요한 게 코드인데 그 코드를 받기 위한 주소를 적는 ..

SpringbootSecurity 2021.08.27