이번엔 이전에 발급받은 access token이 만료됐을 경우 refresh token을 이용해 다시 토큰을 발급받는 과정을 구현해 보겠다 1. 일단 refresh token으로 access token과 refresh token을 발급해 주는 API를 만들어보자1-1. refresh token을 이용한 토큰 재발급의 경우 access token이 만료된 경우다. 따라서 해당 API를 호출할 경우 access token이 없어도 호출이 가능해야 한기 때문에 SecurityFilter에서 호출을 허용해줘야 한다.authorizeExchange(exchanges -> exchanges .pathMatchers("/users/token").permitAll() .anyExchange().authen..
로그인을 테스트해볼 수 있는 화면은 React 프로젝트로 만들어 보도록 하겠다(npm, node.js는 설치되어 있다고 가정하고 진행한다) 1. 이를 위해 vite를 사용해 React 프로젝트부터 만들어보자$npm create vite@latest front-oauth프로젝트명은 알기 쉽게 front-oauth라고 적어줬다위의 명령어를 실행하면 framework 등 선택 화면이 나오는데 아래와 같이 선택했다 2. 위의 설치 과정이 끝난 후 localhost:5173으로 접속하면 아래와 같은 화면이 나오면 설치 과정이 정상적으로 완료된 것이다 2. 간단한 테스트를 위해 로그인 버튼만 존재하는 화면을 만들어보자. function App() { return ( 로그인 )}e..
JWT payload에 원하는 정보를 넣기 위해 일단 권한 서버부터 수정해 보자 1. OAuth2TokenCustomizer 빈을 재정의하면 된다@Beanpublic OAuth2TokenCustomizer jwtCustomizer(UserDetailsService userDetailsService) { return context -> { if (OAuth2TokenType.ACCESS_TOKEN.equals(context.getTokenType())) { String username = context.getPrincipal().getName(); UserDetails userDetails = userDetailsService.loadUserByUs..
이제 OAuth2 서버 중 마지막인 리소스서버를 만들어보자 1. 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'implementation 'org.springframework.security:spring-security-oauth2-jose'우리는 JWT 토큰을 사용하므로 'org.springframework.security:spring-security-oauth2-jose' 의존성도 추가했다 2. 토큰을 발급해 준 issuer url을 설정에 추가한다(application.yml)spring: security: oauth2: resourceserver: jwt:..
https://while-programming.tistory.com/150에서 만들었던 권한서버를 이용하는 클라이언트 서버를 만드는 과정은 비교적 간단하다 대략적인 OAuth의 흐름은 아래와 같다 위의 flow를 보면 클라이언트 서버에 필요한 기능은user의 로그인 요청을 받을 수 있어야 한다user의 로그인 요청에 대해 권한 서버로 요청을 할 수 있게 해야 한다권한서버에 user가 로그인을 완료하면 권한서버에게 토큰을 요청해야 한다전달받은 토큰으로부터 사용자 정보를 가져와야 한다 이제 클라이언트 서버에 필요한 기능이 정리됐으니 구현을 시작해 보자 1. 일단 스프링으로 서버를 시작할 것이기 때문에 스프링 서버 의존성을 추가한다dependencies { implementation 'org.springfr..
전체적인 과정은 공식문서를 참고해서 만들어 보았다(https://docs.spring.io/spring-authorization-server/reference/1.3/getting-started.html) 1. 의존성을 추가한다전체 application.yaml 파일이 아닌 필수적인 부분만 작성dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation "org.springframework.boot:spring-boot-starter-oauth2-authorization-server"} 2. OAuth2 엔드포인트 설정용 SecurityFilterChain 빈을 정의@Be..
람다를 사용할 때 아래와 같은 에러 문구를 보면서 궁금했던 점을 찾아보고 정리해보았다Variable used in lambda expression should be final or effectively final 처음에는 단순하게 람다가 병렬로 처리되나? 라고 생각했는데 아니었다 ㅎㅎ그래서 조사해본 결과 (effectively) final 이라는 제약이 왜 필요한지 언제 필요한지를 알게 되었다. 일단 effectively final이 무엇인지 정리해보면,말 그대로 final 키워드는 없지만 초기화 된 이후 값이 한번도 변경되지 않았다면 effectively final이라고 한다 조사해보기 전에는 람다에서 외부 변수를 사용하려면 무조건 (effectively) final 변수이어야 하는 줄 알았는데 아..
AWS를 이용하다 보면 ECR을 사용하는 경우가 있다.보통 CI/CD로 ECR에 배포하지만 가끔 수동으로 ECR에 배포하고 싶은 경우가 있다. 수동으로 ECR에 배포하려고 하면 어떻게 하면 되는지 알아보자 일단 ECR에 Repository부터 만들자. test-repo라고 만들어보자 ECR에 배포하기 위해서는 이미지가 있어야 하는데 도커 이미지를 사용해 보겠다.일단 아래 명령어로 도커 이미지부터 생성해 보자.docker build --build-arg SPRING_PROFILE=test -t xxx.dkr.ecr.ap-northeast-2.amazonaws.com/test-repo:test .스프링 환경을 test로 실행하기 위해 SPRING_PROFILE 환경 변수 값을 test로 설정해 준다-t..
- Total
- Today
- Yesterday
