공부기록/Spring Security

    Controller에서 Security 정보 가져오기

    사용자가 크게 멘토와 멘티 두개의 역할 군으로 나뉘어져 있고 두 역할이 하나의 API Endpoint를 공유해서 사용을 하고 있고 하나의 값에 대해서 접근 권한이 다르기 때문에 분기 처리가 필요로 하고 사전에 filter에서 처리된 Role을 가져오고자 한다 Annotation Role을 가져오기 위해서는 SecurityContext에 접근을 해야 하는데 Security에서 제공하는 것으로는 @AuthenticationPrincipal, @CurrentSecurityContext가 있다 @AuthenticationPrincipal SecurityContext에 담겨진 Authentication에서 getPrincipal()을 통해 principal 객체를 반환 @CurrentSecurityContext추..

    Spring Security - 동적 권한 처리

    스프링 시큐리티를 사용하는 프로젝트를 진행하는 도중 동적으로 권한을 처리해야하는 경우가 생겼다 기존에 공부할때는 특정 접근 경로에 대해서 어떠한 권한(혹은 역할)이 있는지를 판단하는 것이 전부였고 간단한 상황에서만 사용이 가능했다 문제 상황 게시글을 작성한 사용자, 해당 게시글에 접근이 허락된 사용자들에 대해서 권한 처리 문제 게시글을 작성한 사용자에 대해서 기존 방식대로 권한을 주게 되면 ROLE_WRITER와 같이 주면 된다 requestMatchers("/post/**").hasRole("WRITER") 하지만 이 방식대로 권한을 주게되면 한가지 문제점이 있다 1번 글 작성자가 2번 글에 대해서 권한을 가질 수 있게 된다는 점이다 예를들어 1번글 작성자가 /post/1/update 경로로 접속을 하..

    [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 2

    목차 [이론] 스프링 시큐리티 1 [OAuth] 스프링 시큐리티 OAuth [실습] 스프링 시큐리티 OAuth2 Login 1 [실습] 스프링 시큐리티 OAuth2 Login 2 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 1 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 2 앞서 스프링 시큐리티가 어떻게 yml파일만을 가지고 설정을 하는지에 대해 알아보았다 이번에는 로그인 요청이 들어왔을때 어떻게 처리하는지 알아보자 OAuth 로그인 요청 처리 역시 Spring Security 답게 Filter를 사용해서 로그인 처리를 하게 된다 앞서 form Login에서 UsernamePasswordAuthenticationFilter에 대해서 충분히 이해했다면 이 또한 쉽게 이해할 것이다 혹시라도..

    [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 1

    [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 1

    목차 [이론] 스프링 시큐리티 1 [OAuth] 스프링 시큐리티 OAuth [실습] 스프링 시큐리티 OAuth2 Login 1 [실습] 스프링 시큐리티 OAuth2 Login 2 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 1 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 2 이전에 스프링 시큐리티를 이용하여 OAuth로그인을 해보았다 정보를 매핑, 유저 저장하는 것 외에 단순히 yml파일에 정보만을 작성했을 뿐인데 로그인이 진행된 것을 볼 수 있다 크게 2가지 작업으로 나누어 어떻게 이루어 진것인지를 알아볼 예정이다 Setting Login 요청 처리 양이 좀 많으므로 우선 Setting부분을 알아보자 Setting 프로퍼티객체 생성 스프링은 기본적으로 수 많은 자동 설정들을 제공한다 ..

    [실습] 스프링 시큐리티 OAuth2 Login 2

    목차 [이론] 스프링 시큐리티 1 [OAuth] 스프링 시큐리티 OAuth [실습] 스프링 시큐리티 OAuth2 Login 1 [실습] 스프링 시큐리티 OAuth2 Login 2 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 1 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 2 앞서 OAuth2 로그인에 대해서 알아보았다 이번에는 Front와 통신을 위한 OAuth2 로그인 후 JWT 발행하는 법을 알아볼 것이다 Security Config 앞서 일반 로그인에서 filter에 successHandler를 설정해준 것처럼 이번에도 successHandler를 통해서 JWT발행을 할 것이다 기억이 나지 않는다면 스프링 시큐리티 JWT 처리를 보고오자 이번에는 직접 filter를 만드는게 아니라..

    [실습] 스프링 시큐리티 OAuth2 Login 1

    [실습] 스프링 시큐리티 OAuth2 Login 1

    목차 [이론] 스프링 시큐리티 1 [OAuth] 스프링 시큐리티 OAuth [실습] 스프링 시큐리티 OAuth2 Login 1 [실습] 스프링 시큐리티 OAuth2 Login 2 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 1 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 2 사전작업 Dependency 추가 dependencies { // 의존성 추가 implementation 'org.springframework.security:spring-security-oauth2-client' } OAuth 서비스 등록 google, naver, kakao, facebook 등 여러개가 있지만 naver를 기준으로 설명을 할 예정이다 네이버 서비스 등록 위 링크에서 사용할 애플리케이션 등록을 해..

    [이론] 스프링 시큐리티 OAuth

    [이론] 스프링 시큐리티 OAuth

    목차 [이론] 스프링 시큐리티 1 [OAuth] 스프링 시큐리티 OAuth [실습] 스프링 시큐리티 OAuth2 Login 1 [실습] 스프링 시큐리티 OAuth2 Login 2 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 1 [추가] 스프링 시큐리티 OAuth 로그인 처리 방법 2 OAuth(Open Authorization)란 타사 웹사이트나 웹이 리소스에 접근 할 수 있게 허용해 주는 것이 주 목적이다 OAuth는 인증(Authentication)과 인가(Authorization)중 인가에 조금더 초점을 맞추고 있다 카카오 로그인에 대해서 생각해보자 우리는 흔히 카카오의 정보를 이용해서 편히 로그인을 해오고 있다 이부분에서 사용자의 정보 즉 해당 사용자가 카카오에 가입이 되어있는지는 카카오..

    [실습] 스프링 시큐리티 JWT 처리

    목차 [이론] 스프링 시큐리티 1 [이론] 스프링 시큐리티2 [실습] 스프링 시큐리티 Form Login [추가] CustomAuthenticationProvider vs DaoAuthenticationProvider [이론] 스프링 시큐리티3 [이론] 스프링 시큐리티4 [추가] AuthorizeReqeusts vs AuthorizeHttpRequests [실습] 스프링 시큐리티 Json data Login 처리 [실습] 스프링 시큐리티 JWT 설정 [실습] 스프링 시큐리티 JWT 처리 OAuth2 이제 그럼 로그인 후 JWT 생성 처리와 Token을 가지고 접근 시 처리를 알아보자 Config SecurityConfig @Bean public SecurityFilterChain securityFilte..

    [실습] 스프링 시큐리티 JWT 설정

    목차 [이론] 스프링 시큐리티 1 [이론] 스프링 시큐리티2 [실습] 스프링 시큐리티 Form Login [추가] CustomAuthenticationProvider vs DaoAuthenticationProvider [이론] 스프링 시큐리티3 [이론] 스프링 시큐리티4 [추가] AuthorizeReqeusts vs AuthorizeHttpRequests [실습] 스프링 시큐리티 Json data Login 처리 [실습] 스프링 시큐리티 JWT 설정 [실습] 스프링 시큐리티 JWT 처리 OAuth2 JWT에 대해서 우선 JWT 사용 전에 왜 사용하는지에 대해 궁금하면 아래 사이트를 참고하면 좋을 듯 하다 JWT.io [JWT.IO JSON Web Tokens are an open, industry sta..

    [실습] 스프링시큐리티 Json data Login 처리

    목차 [이론] 스프링 시큐리티 1 [이론] 스프링 시큐리티2 [실습] 스프링 시큐리티 Form Login [추가] CustomAuthenticationProvider vs DaoAuthenticationProvider [이론] 스프링 시큐리티3 [이론] 스프링 시큐리티4 [추가] AuthorizeReqeusts vs AuthorizeHttpRequests [실습] 스프링 시큐리티 Json data Login 처리 [실습] 스프링 시큐리티 JWT 설정 [실습] 스프링 시큐리티 JWT 처리 OAuth2 기존에 formLogin을 사용해서 진행했던 이전 프로젝트에서 크게 달라진 점은 없다 달라진 점이라곤 filter를 새로 정의하였고, filter를 설정하는 부분이 추가가 되었다는 점이다 로그인 처리 방식 기..