SpringbootSecurity 25

SpringbootSecurity/RFC문서에 대한 개념

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 이 사이트로 가면 JWT에 대한 설명이 나온다. 어떤 암호화 방식을 쓰는지 어떻게 사용하는지 등등 잘 나와있다.(영어긴 하지만...) 그래서 여기에 적인 문서를 정리를 하기 위해서 포스팅을 한다. 그럼 JWT를 이해하기 전에 RFC문서가 뭔지 알아야 이해할 수 있다. 이 JWT는 RFC7519번 문서에 설명이 나오기 때문이다. RFC문서란? http라는 것은 미국에 벨연구소라는 곳이 있는며 여기서 월드 와이드 웹(WWW)이 나왔다. www가 뭐냐..

SpringbootSecurity 2021.09.04

SpringbootSecurity/JWT/JWT기본개념(CIA와 RSA에 대해 이해하기)

이번 포스팅에서는 보안에 대해 포스팅을 간단하게 해 보겠습니다. CIA C : 기밀성 I : 무결성 A : 가용성 그럼 설명을 좀 더 쉽게 하기위해서 과거에 가서 통신한다는 가정을 해서 얘기를 시작해 본다. 몇백 년 전에 말 타고 다그닥 거리던 시절에 뭐 이런일이 발생한다고 해보자 그럼 여기서 발생할 수 있는 변수가 뭐가 있을까? A나라가 B나라로 통신을 하기 위해 신하에게 문서를 주고 B나라로 보냈는데 C나라가 중간에 이 신하를 죽이고 문서를 바꿔서(C:기밀성) B나라로 위조된 문서(I: 무결성)를 보내면 어떻게 될까? 신뢰성 있는 통신을 할 수 없게 된다.(A :가용성) 위 상황에서는 CIA가 다 깨지게된다. 보안을 하기 위해서는 CIA를 완벽하게 지킨 상태로 통신을 이뤄야 한다 CIA를 완벽하게 지..

SpringbootSecurity 2021.09.02

SpringbootSecurity/JWT/JWT기본개념(TCP에 대해 이해하기)

저번 포스팅에서 Session에 대한 이해와 더해서 JWT를 이해하기 위해선 TCP도 알고 있어야 한다. 어떤 새로운 기술을 배울 때 그 기술이 원초적으로 이해가 되지 않는다면 그 기술에 대한 배경지식이 많이 부족하다는 것이다. 그래서 그 기술을 기술적으로 사용할 수 있게 된다고 해도 이해를 하지 않았기 때문에 금방 까먹고 새로운 기술이 나오면 처음부터 다시 배우는 느낌이 들 수밖에 없다. 그렇기 때문에 이런 배경지식을 먼저 이해하는 것이 중요한 것 같다 osi 7 계층에 대한 자세한 내용은 따로 포스팅이 되어있습니다! 웹에는 OSI 7 계층이라는 것이 있다. 이걸이해해야 TCP/IP를 알게되고 그래야 보안을 이해하면서 왜 JWT가 나오는지 알수 있게되는 것이다. OSI 7계층 1. 응용계층 : 응용프로..

SpringbootSecurity 2021.09.02

SpringbootSecurity/JWT기본개념(세션에 고질적인 문제)

JWT JWT는 json web token이 라고 한다. 그럼 이 JWT가 왜 사용되고 어디에 사용되는지 먼저 알아보자 JWT를 이해하기위해선 session의 단점이 뭔지부터 알아야 한다. Session 기본적으로 사용자가 웹에서 서버로 최초 요청을 한다고 하면 서버가 응답을 할 때 해더에 쿠키를 담아서 세션 id를 넘겨주고 사용자의 웹에 자동으로 쿠키를 저장하는 것이 기본전략이다. 그래서 다음에 같은 사용자가 다시 요청을 한다고하면 쿠키에 있는 세션id를 보고 사용자의 요청을 효율적으로 응답할 수 있게 되는 것이다. 그럼 이 session은 언제 사라지냐? 1. 서버 쪽에서 session값을 날렸을 때 2. 사용자가 브라우저를 전부 종료했을 때 3. 특정 시간이 지나면 자동 삭제 이때 서버가 알아야 하..

SpringbootSecurity 2021.09.02

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