JWT 를 이용한 인증을 위한 자바 기반 서버로 JWT 기반 Authentication 과 Authorization 을 어떻게 처리하는지 이해할 수 있는 예시 프로젝트입니다.
아래 파일을 다운로드 받아 실행해 보실 수 있습니다.
그리고 아래와 같이 실행하시면 됩니다.
java -jar jwt-sample-server-0.1.0.jar
만약 소스 코드를 수정해서 테스트해 보고 싶다면 아래와 같이 따라해 보세요.
- git clone https://github.com/okreact/jwt-sample-server.git
- 설정 변경 혹은 소스 코드 수정
./gradlew bootRun
(Windows 에서는gradlew.bat bootRun
) 명령어로 실행
아이디 패스워드를 입력하면 응답 헤더에서 JWT 값을 전달받습니다. 테스트를 위해서 아래와 같이 CURL 도구를 사용해서 요청하거나 Postman 을 이용해서 요청을 할 수 있습니다.
curl -d '{"username":"admin", "password":"tiger"}' -H "Content-Type: application/json" -X POST http://localhost:8080/login -i
아래는 응답 문자열입니다.
HTTP/1.1 200
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTUxODU5MzEzM30.igRhEGIu8QAwvLA4ZLJB_4ej_oDOydpkgScPnQ6nWZJDvpIktLAhG02-yDGx5ZUXoa2qMp84c995KvHiP2_Gyg
Content-Length: 0
Date: Sun, 04 Feb 2018 07:25:33 GMT
위 응답 헤더 값 중 Authorization
헤더 값을 아래와 같이 전송해서 사용자 목록 값을 조회할 수 있습니다.
curl -H "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTUxODU5MzEzM30.igRhEGIu8QAwvLA4ZLJB_4ej_oDOydpkgScPnQ6nWZJDvpIktLAhG02-yDGx5ZUXoa2qMp84c995KvHiP2_Gyg" -X GET http://localhost:8080/users
아래는 응답 값입니다.
[{"firstName":"Richard","lastName":"Feynman"},{"firstName":"Grigori","lastName":"Perelman"}]
만약 Authorization
헤더 값을 전달하지 않으면 아래와 같이 403 Forbidden
오류가 발생합니다.
{"timestamp":1517729812092,"status":403,"error":"Forbidden","message":"Access Denied","path":"/users"}