TokenReference : jwt4j-lite
jwt4j-lite โ Java ๋ฐ Spring Boot ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ๋ํ๋ JWT(Json Web Token) ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด ํ๋ก์ ํธ๋ io.jsonwebtoken:jjwt-api ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ฒดํ ์ ์๋ JwtProvider ์ญํ ์ ์ํํ๋ฉฐ,
JWT์ ๋ฐ๊ธ๊ณผ ๊ฒ์ฆ ๋ก์ง์ ์ปค์คํฐ๋ง์ด์งํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
Main Goals:
io.jsonwebtoken:jjwt-* ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ฒด ๊ฐ๋ฅํ ๊ฒฝ๋ JWT ์์ง ์ ๊ณต
์ต์ํ์ ์ค์ ์ผ๋ก ์ปค์คํ
ํด๋ ์ ๋ฐ๊ธ ๋ฐ ๊ฒ์ฆ ๊ธฐ๋ฅ ์ง์
์์ค์ ์ค์ ํ์ผ์ ๊ท๊ฒฉ์ ํต์ผํ์ฌ ์ฝ๋ ํ์ง ๋ฐ ๊ฐ๋
์ฑ ํฅ์
Spring Boot์ ์์ฐ์ค๋ฝ๊ฒ ํตํฉ๋์ด ๋น ๋ฅธ ๊ฐ๋ฐ ๋ฐ ์ ์ง๋ณด์ ๊ฐ๋ฅ
HTTP Method
API Method List
API Detailed description
ํ ํฐ ๋ฐํ / Token Issue
ํ ํฐ ๊ฒ์ฆ / Token Verify
ํ ํฐ ์ ๋ณด ์ถ์ถ / Token claim extraction
Direct Method
Installation
Usage Example
ํ ํฐ ๋ฐํ / Token Issue
ํ ํฐ ๊ฒ์ฆ / Token Verify
ํ ํฐ ์ ๋ณด ์ถ์ถ / Token claim extraction
Response Format
ํ ํฐ ๋ฐํ / Token Issue
ํ ํฐ ๊ฒ์ฆ / Token Verify
ํ ํฐ ์ ๋ณด ์ถ์ถ / Token claim extraction
Method Name
HTTP Method
Description
api/v1/createToken
POST
ํ ํฐ ๋ฐํ
api/v1/verifyToken
POST
ํ ํฐ ๊ฒ์ฆ
api/v1/extractClaim
POST
ํ ํฐ ์ ๋ณด ์ถ์ถ
3. API Detailed description
a. ํ ํฐ ๋ฐํ / Token Issue
์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ํตํด ํ ํฐ์ ๋ฐํํ๋ค.
๋ฉ์๋๋ช
: api/v1/createToken
Request Type
Value
Description
POST
JSONObject
JSONObject
ํ ํฐ์ ๋ด๊ธฐ๋ ์ ๋ณด๋ ํ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค(์๋์ ํ๋๋ ์ฌ์ฉํ์ง ์์๋ ๋ฌด๊ด)
Key
Value
Description
ci
String
๊ตฌ๋ถ ์ฝ๋ ๊ฐ
role
String
์ฌ์ฉ์ ๊ถํ
username
String
์ฌ์ฉ์ ์์ด๋
password
String
์ฌ์ฉ์ ํจ์ค์๋ (ํ๋ฌธ/์ํธ๋ฌธ ๋ฌด๊ด)
...
Primitive Types
์ฌ์ฉ์ ์ ๋ณด
{
"ci" : " 12345678" ,
"role" : " user" ,
"username" : " test_user" ,
"password" : " [VK+SJA26vJFCuDL/kPYAQ073GZTmTOpAbi5izZ10AFx3NlDDW6brVoBOeFlfA5hxHeOQw+Pz+M/XN.."
}
b. ํ ํฐ ๊ฒ์ฆ / Token Verify
์ฌ์ฉ์์ ํ ํฐ์ ๊ฒ์ฆํ๋ค.
๋ฉ์๋๋ช
: api/v1/verifyToken
Request Type
Value
Description
POST
JSONObject
JSONObject
Key
Value
Description
jwt
String
ํ ํฐ ๊ฐ
{
"jwt" : " e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g=="
}
c. ํ ํฐ ์ ๋ณด ์ถ์ถ / Token claim extraction
์ฌ์ฉ์์ ํ ํฐ์ ํตํด ๋ด๋ถ ์ ๋ณด๋ฅผ ์ถ์ถํ๋ค.
ํด๋น ํ ํฐ์ ๋ง๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์๋ช
๊ฒ์ฆ๋ง ํต๊ณผํ๋ฉด ๋ด๋ถ ์ ๋ณด(Claim)์ ์ถ์ถํ ์ ์๋ค.
๋ฉ์๋๋ช
: api/v1/extractClaim
Request Type
Value
Description
POST
JSONObject
JSONObject
Key
Value
Description
jwt
String
ํ ํฐ ๊ฐ
{
"jwt" : " e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g=="
}
// Gradle
implementation 'jwt4j-lite-*.jar'
import java .util .HashMap ;
import java .util .Map ;
public class JwtExample {
public static void main (String [] args ) {
// ========================
// 1. Create JWT
// ========================
Map <String , String > claims = new HashMap <>();
claims .put ("userId" , "user123" );
claims .put ("role" , "ADMIN" );
try {
CreateTokenResponse createResponse = tokenService .createJwt (claims );
String jwtToken = createResponse .getJwt ();
System .out .println ("Generated JWT: " + jwtToken );
// ========================
// 2. Verify JWT
// ========================
VerifyTokenResponse verifyResponse = tokenService .verifyJwt (jwtToken );
System .out .println ("Verification result: " + verifyResponse .getResultMsg ());
// ========================
// 3. Extract Claims
// ========================
ExtractClaimResponse claimResponse = tokenService .extractClaimToJwt (jwtToken );
System .out .println ("Extracted Claims: " + claimResponse .getClaims ());
} catch (TokenException e ) {
System .err .println ("Token error: " + e .getErrorCode () + " - " + e .getMessage ());
} catch (Exception e ) {
e .printStackTrace ();
}
}
}
1. ํ ํฐ ๋ฐํ / Token Issue
Key
Value
Description
claim
Map<String, String>
ํ ํฐ ์ ๋ณด ํฌํจ๋๋ ๋ฐ์ดํฐ
jwt
String
ํ ํฐ
resultCode
String
๊ฒฐ๊ณผ ์ฝ๋
resultMsg
String
๊ฒฐ๊ณผ ๋ฉ์์ง
{
"claim" : {
"ci" : " 12345678" ,
"role" : " user" ,
"username" : " test_user" ,
"password" : " [VK+SJA26vJFCuDL/kPYAQ073GZTmTOpAbi5izZ10AFx3NlDDW6brVoBOeFlfA5hxHeOQw+Pz+M/XN.."
},
"jwt" : " e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g==" ,
"resultCode" : " 200" ,
"resultMsg" : " Success"
}
2. ํ ํฐ ๊ฒ์ฆ / Token Verify
Key
Value
Description
claim
Map<String, String>
ํ ํฐ ์ ๋ณด ํฌํจ๋๋ ๋ฐ์ดํฐ
jwt
String
ํ ํฐ
resultCode
String
๊ฒฐ๊ณผ ์ฝ๋
resultMsg
String
๊ฒฐ๊ณผ ๋ฉ์์ง
{
"claim" : {
"ci" : " 12345678" ,
"role" : " user" ,
"username" : " test_user" ,
"password" : " [VK+SJA26vJFCuDL/kPYAQ073GZTmTOpAbi5izZ10AFx3NlDDW6brVoBOeFlfA5hxHeOQw+Pz+M/XN.."
},
"jwt" : " e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g==" ,
"resultCode" : " 200" ,
"resultMsg" : " Success"
}
3. ํ ํฐ ์ ๋ณด ์ถ์ถ / Token claim extraction
Key
Value
Description
jwt
String
ํ ํฐ
resultCode
String
๊ฒฐ๊ณผ ์ฝ๋
resultMsg
String
๊ฒฐ๊ณผ ๋ฉ์์ง
{
"claim" : {
"ci" : " 12345678" ,
"role" : " user" ,
"username" : " test_user" ,
"password" : " [VK+SJA26vJFCuDL/kPYAQ073GZTmTOpAbi5izZ10AFx3NlDDW6brVoBOeFlfA5hxHeOQw+Pz+M/XN.."
},
"jwt" : " e29JzDyi.mwVQotk9DFqLwPpLw8TutiwiX6x4XQUrYtngFyoC7VPVs1txq54NGuzWbHt12rGbA6nnetYSnAinJRpVRzjyXj3GogWjwb2FMeYPshrZFhpaVvJFy2g39FcNusGHoHH5uBcmdEvme6g2crSuNKXbtsaREbakFtGu4oCk7CuVvz1XoAoc43Lc1hAbdU2VReEF7wxsKYQQLk.Ou+L/qyvpu8ssLpZ+qtDOYRQvHEcT/Qvq86KPapmXugS3SvZPnTnZdjzAB+Kcfd+bZX+OjXMBprUQHId25oD5OVK9XVq+3p839qpiJrbdYx6jWG7R5FhlQzQsH2CZezizUEkUlpc5Q38CNN3eJEZAOkO0TXhyMSyUkKyrMVDdVcLdJEzEXTVhwIICfG/+JCziI7/ijqBfSlGE4yB+14tfV2Ks2LdjfXf65zphz1Wm43oP2jzPFvreKta1twUKvhzKLAiYsxMD+kuL14zOJvYQJlnGozZG4rJT8qZUEVMglbCuoeqmXzmAUSGOcg6uaIN2/uPFT4oOgkmAkC5bvKw2g==" ,
"resultCode" : " 200" ,
"resultMsg" : " Success"
}