스프링 jwt 예제

참고: JWT 서명 키를 응용 프로그램 코드에 하드 코딩해서는 안 됩니다(예제에서는 현재 는 무시합니다). 환경 변수 또는 .properties 파일을 사용해야 합니다. 또한 키의 길이가 적절해야 합니다. 예를 들어 HS512 알고리즘에는 크기가 512바이트 이상인 키가 필요합니다. JWTS를 통해 RESTful 스프링 부팅 API를 확보하는 것은 어려운 일이 아닙니다. 이 문서에서는 몇 가지 클래스를 만들고 Spring Security에서 제공하는 몇 가지 다른 클래스를 확장하여 알 수 없는 사용자로부터 엔드포인트를 보호하고, 사용자가 자신을 등록할 수 있도록 하며, JWTS를 기반으로 기존 사용자를 인증할 수 있음을 보여 주어 있습니다. 내 github에서 소스 코드를 체크 아웃, 그것은 또한 JUnit를 사용 하 여 코드를 테스트 포함, 봄 부팅 테스트, RestAssured 등. 정보 교환: JSON 웹 토큰은 당사자 간에 정보를 안전하게 전송하는 좋은 방법입니다. 예를 들어 공개/비공개 키 쌍을 사용하여 JWT에 서명할 수 있으므로 발신자가 누구인지 확인할 수 있습니다. 또한 헤더와 페이로드를 사용하여 서명이 계산되면 콘텐츠가 변조되지 않았는지 확인할 수도 있습니다. 예상대로 Spring Security 프레임워크에는 세션 쿠키, HTTP Basic 및 HTTP 다이제스트와 같은 “이전” 권한 부여 메커니즘을 처리하는 많은 플러그인 클래스가 함께 제공됩니다. 그러나 JWT에 대한 기본 지원이 부족하므로 손을 더럽게 하여 작동시켜야 합니다. 자세한 개요는 공식 스프링 보안 문서를 참조해야 합니다.

컴파일 한 다음 자바 응용 프로그램으로 스프링 부트 헬로 월드 응용 프로그램.java를 실행합니다. localhost:8080/hello 이제 RESTful Spring Boot API가 노출하는 끝점을 살펴보았으니 보안을 시작하려고 합니다. 첫 번째 단계는 새 사용자가 자신을 등록할 수 있도록 하는 것입니다. 이 기능에서 만들 클래스는 com.auth0.samples.authapi.springbootauthupdated.user라는 새 패키지에 속합니다. 이 패키지를 만들고 ApplicationUser라는 새 엔터티 클래스를 추가해 보겠습니다: 두 번째 문제인 누락된 BCryptPasswordEncoder 인스턴스는 BCryptPasswordEncoder 의 인스턴스를 생성하는 메서드를 구현하여 해결합니다. 이 메서드는 @Bean 함께 추가 해야 하 고 우리는 스프링 부트AuthUpdatedApplication 클래스에 추가 합니다: 우리는 @EnableWebSecurity 이 클래스에 추가 하 고 기본 웹 보안을 활용 하기 위해 WebSecurityConfigurerAdapter 확장 했다 스프링 시큐리티에서 제공하는 구성. 이를 통해 예제 응용 프로그램의 컨트롤러가 가능한 한 간단할 수 있도록 세 가지 방법을 정의하여 프레임워크를 필요에 맞게 미세 조정할 수 있습니다. 사용자가 권한이 없는 경우 메시지 또는 HTTP 403 오류 코드만 반환합니다. REST API를 디자인할 때는 REST API를 보호하는 방법을 고려해야 합니다.

Spring 기반 응용 프로그램에서 Spring Security는 훌륭한 인증 및 권한 부여 솔루션이며 REST API를 보호하기 위한 몇 가지 옵션을 제공합니다. JWT에 대한 스프링 보안을 구성합니다. 유효한 JSON 웹 토큰을 얻을 사용자를 사용하여 매핑 / 인증과 REST POST API를 노출합니다. 그런 다음 유효한 토큰이있는 경우에만 사용자가 API /hello에 대한 액세스를 허용해야합니다. 구성은 간단합니다, 우리는 단지 몇 가지 세부 사항을 설정해야합니다 : 이제 우리가 위의 XML에 선언 된 특정 클래스를 구현하는 방법을 보자. 봄은 우리를 위해 그들을 와이어 것입니다. 우리는 가장 간단한 것들부터 시작합니다. 참고: /login 끝점에 발급된 요청을 처리하는 클래스가 궁금할 수 있습니다.

이 질문에 대한 대답은 간단합니다, 이전에 만든 JWTAuthenticationFilter 클래스는 사용자 이름암호 인증 필터를 확장합니다. 스프링 시큐리티에서 제공하는 이 필터는 이 끝점에 대한 책임으로 등록됩니다. 따라서 백 엔드 API가 /login에 대한 요청을 받을 때마다 이 필터(예: JWTAuthenticationFilter)의 전문화가 실행되고 인증 시도(시도 인증 메서드를 통해)를 처리합니다.