블로그목적
스프링시큐리티관련 JWT에 대해서 간단한 구현을 통해 정리및 공유한다.
스프링 시큐리티관련 JWT 실습
지난번 블로깅을 통해서 JWT 를 알아보았는데요. 직접 구현을 해보겠습니다.
아래는 상세 내용입니다.
하나, pom.xml(의존성관리)에 JWT OAuth2 라이브러리를 포함시킨다
둘, 인증서비스가 JWT 토큰을 생성하고 해석하는 방법을 지정해야 함.
인증서비스에서 아래 구성 클래스를 추가함.
JWTTokenStoreConfig.java
설명
public JwtAccessTokenConverter jwtAccessTokenConverter()
JWT 와 OAuth2 서버 사이의 변환기로 동작함.
함수호출
converter.setSigningKey(serviceConfig.getJwtSigningKey());
토큰 서명에 사용되는 서명 Key 를 정의함.
셋, 서명 Key 를 가져오기위한 구성 클래스 및 환경설정을 추가함.
ServerConfig.java
설명
application.properties 내용을 읽어옴
넷, JWT 토큰을 생성하고 해석하는 방법을 OAuth2 서비스로 연결함.
JWTOAuth2Config.java
package com.example.test2.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.provider.token.TokenEnhancerChain;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import java.util.Arrays;
@Configuration
public class JWTOAuth2Config extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private TokenStore tokenStore;
@Autowired
private JwtAccessTokenConverter jwtAccessTokenConverter;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
tokenEnhancerChain.setTokenEnhancers(Arrays.asList(jwtAccessTokenConverter));
endpoints
.tokenStore(tokenStore)
.accessTokenConverter(jwtAccessTokenConverter)
.authenticationManager(authenticationManager)
.userDetailsService(userDetailsService);
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("eagleeye")
.secret(PasswordEncoderFactories.createDelegatingPasswordEncoder().encode("thisissecret"))
.authorizedGrantTypes("refresh_token","password","client_credentials")
.scopes("webclient", "mobileclient");
}
}
설명
endpoint
tokenStore(tokenStore) 함수 호출
토큰 저장소를 여기에서 삽입함.
accessTokenConverter(jwtAccessTokenConverter) 함수 호출
스프링 시큐리티 OAuth2 코드가 JWT를 사용하도록 연결함.
그럼, 서버를 기동시켜 볼까요?
그럼, Postman 을 사용해서 테스트를 해볼께요.
설명
정상적으로 access_token / refresh_token 등등을 받아 오네요..
그럼, 토큰 정보(access_token)를 JWT 디코딩 웹페이지를 통해서 디코딩해볼께요.
참고페이지
설명
위와 같이 JWT 를 확인해 볼 수 있네요...
즉, 온라인 JWT 도구로 토큰을 디코딩하고 내용을 까볼 수 있으므로,
정보 or 개인식별정보(PII, Personally Identifiable Information)는 절대로 JWT 토큰에 담지 않는게 좋을 것 같네요...
JWT 에 대해서 좀더 공부해 보시고 싶으시면, 아래 페이지를 참고하셔도 좋을 것 같습니다.
참고페이지
https://www.baeldung.com/spring-security-oauth-jwt
결론
온라인 JWT 도구로 토큰을 디코딩하고 내용을 까볼 수 있으므로, 정보 or 개인정보는 토큰에 담지않는게 좋을 것 같음.
오늘도 JWT 관련 실습 및 지식획득완료! 감사합니다.
오늘의 명언 한마디
인도 우화에 등장하는 "시칸다 왕"은 돈과 권력을 거머쥔 욕심많은 왕이다.
어느날 거리에서 거지 성자가 동냥 그릇을 내밀며 물건을 채워달라고 부탁하는 것을 보았다.
왕은 신하를 시켜 음식과 비단과 보석으로 동냥 그릇을 채우게 했다.
그런데 그 그릇은 항상 반만 채워져 있는게 아닌가?
놀란 왕이 거지 성자를 보며 그 이유를 묻자.
거지 성자는 "세상의 모든 보물을 여기에 담는다 해도 그것은 항상 비어 있을 것입니다. 이것은 욕망이라는 그릇입니다."라고 말했다.
시칸다 왕의 과욕에 일침을 준 것이다. 투자에 실패하는 이유 중 가장 큰 원인은 시칸다 왕처럼 욕심을 제어하지 못하기 때문이다.
투자는 결국 한정된 자산을 더 크게 키우기 위한 인간의 욕망에서 비롯되었다고 볼 수 있다.
따라서 투자에 있어서 욕망은 늘 주의해야할 상당한 큰 위험 요소다
박상언 지음, "나는 주식보다 연금형 부동산이 좋다" 중에서...
오늘의 영어 한마디
What makes your product different?
그 제품만이 특색은 뭔가요?
Well, we stand firm on quality.
우선, 품질 면에서 차원이 다릅니다.
설명
"다른 상품과 어디가 다른가?" 는, 특색이 무엇인가의 의미를 가짐.
갑자기 애플(Apple) 회사가 생각남 ^^; 이것이 광고의 어마어마한 힘같음;;;
https://ko.wikipedia.org/wiki/Think_different
Think different는 애플이 1997년에 로스앤젤레스 광고 대행사 TBWA\Chiat\Day 사무소에서 만든 광고 문구의 하나이다.[1] 유명한 TV 광고, 인쇄 광고물, 수많은 애플 제품의 TV 프로모션에도 사용되었다. 그러나 2002년의 애플 스위치 광고 캠페인이 시작되면서 애플은 이 선전 문구의 사용을 중단하였다.
"stand firm on quality", 품질에 확고한 자세를 취하고 있다라는 의미는 즉, 자신이 있다는 표현!
"firm" 은 "확고한"이라는 뜻을 가짐.
오늘의 민법 한마디
제2편 물권 / 제 1장 총칙
제190조(목적물반환청구권의 양도)
제삼자가 점유하고 있는 동산에 관한 물권을 양도하는 경우에는 양도인이 그 제삼자에 대한 반환청구권을 양수인에게 양도함으로써 동산을 인도한 것으로 본다.
오늘의 재무제표 공부 한마디
정액법
정해진 기간 동안 유형자산의 순원가를 똑같이 배분하는 방법
목표
- 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
- 현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기
- 나는 블로그 생태계에서 IT 테크관련 파워블로거및 인플루언서가 반드시 된다!
목표를 이루기 위한 실천방안
- 꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.
- 천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.
- "천번 생각하는것보다 한번 행동하는 것이 더 중요하다."
- 기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)
- 천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.
- 모든 실수에는 마술이 숨어 있다. 따라서 나는 실수하면 실수할수록, 그런 실수에서 더 많이 배울수록 삶에서 더 많은 마술을 갖는다.
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
37.Spring, 스프링부트에서 제공하고 있는 국제화에 대해서 알아보고 간단하게 구현해보자. (0) | 2021.02.07 |
---|---|
36.Spring, MSA 에서 분산 디버깅을 할 수 있는 기법 및 기술을 알아보자.(feat. 스프링 클라우드 슬루스(Spring Cloud Sleuth)) (0) | 2021.02.06 |
34.Spring, 스프링 시큐리티관련 JWT(JSON Web Token) 에 대해서 알아보자. (0) | 2021.02.06 |
33.Spring, 스프링 시큐리티(OAuth2 인증 사용)에 대한 간단한 구현을 직접 해보자. (0) | 2021.02.06 |
32.Spring, 스프링 시큐리티(OAuth2 인증[2/2])에 대한 개념에 대해서 간단히 알아보자. (0) | 2021.02.06 |