728x90
반응형
JWS Create / Parse
*JWT 관련 자세한 설명 생략
▷ Example
/**
* JWS Create / Parse
*
* ▶ JWS(JSON WEB SIGNATURE)
* → 서버의 PRIVATE KEY로 서명한 것을 토큰화 한것
* → claim 노출
*
* ▶ JWT(JSON WEB TOKEN)
* → JWS & JWE
* → 서버와 클라이언트 간 정보를 주고 받을때 Http request 헤더에 JSON 토큰을 넣은 후
* 별도의 인증 과정없이 헤더에 포함되어 있는 JWT정보를 통해 인증
* → 구성
* → Header : 토큰의 타입과 암호화 알고리즘
* → Payload : claim 정보를 포함( name : value ), 공개/비공개 설정 가능
* → registered claim : JWTClaimsSet 제공
* → public claim : 사용자 정의
* → private claim :
* → Signaure : PRIVATE KEY
* */
public static void jwsExample() throws Exception {
/** JWS Header */
JWSHeader header = new JWSHeader(JWSAlgorithm.HS512);
/** JWS Payload (registered claim) */
JWTClaimsSet payload = new JWTClaimsSet.Builder()
.issuer("토큰 발급자")
.subject("토큰 제목")
.audience("토큰 대상자")
.expirationTime(new Date(new Date().getTime() + 1000*60)) // 토큰의 만료시간
.issueTime(new Date()) // 토큰이 발급된 시간
.jwtID(UUID.randomUUID().toString()) // JWT의 고유 식별자
.build();
System.out.println("> JWT Payload (registered claim) : " + payload.getClaims());
/** JWS Signaure */
final JWSSigner signer = new MACSigner("****************************PRIVATEKEY**************************");
final JWSVerifier verifier = new MACVerifier("****************************PRIVATEKEY1**************************");
SignedJWT jws = new SignedJWT(header, payload);
jws.sign(signer);
jws.serialize();
System.out.println("> RESULT JWS : " + jws.serialize());
/** Parse */
final SignedJWT signedJws = SignedJWT.parse(jws.serialize());
if ( !signedJws.verify(verifier) ) {
System.out.println("> Parse FAIL : " + signedJws.getJWTClaimsSet()); // claim 노출
throw new Exception("Parse FAIL");
} else {
System.out.println("> Parse SUCCESS : " + signedJws.getJWTClaimsSet());
}
}
/*
결과 :
> JWT Payload (registered claim) :
{
iss = 토큰 발급자,
sub = 토큰 제목,
aud = [토큰 대상자],
exp = Thu Oct 20 18: 09: 11 KST 2022,
iat = Thu Oct 20 18: 08: 11 KST 2022,
jti = d99eb85f - 9b3f - 407d - 9740 - 4aab3ae9ea0b
}
> RESULT JWS :
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiLthqDtgbAg7KCc66qpIiwiYXVkIjoi7Yag
7YGwIOuMgOyDgeyekCIsImlzcyI6Iu2GoO2BsCDrsJzquInsnpAiLCJleHAiOjE2N
jYyNTY5NTEsImlhdCI6MTY2NjI1Njg5MSwianRpIjoiZDk5ZWI4NWYtOWIzZi00MDd
kLTk3NDAtNGFhYjNhZTllYTBiIn0.z7NDt_JxNOiedhlOIkBhGNSGO_jipbayNU5Wj
qb-cqiMi_vUVy81by0ae2OeioOrpbBcc6v5lPBd2MJtd4VIuw
> Parse FAIL :
{
"sub": "토큰 제목",
"aud": "토큰 대상자",
"iss": "토큰 발급자",
"exp": 1666256951,
"iat": 1666256891,
"jti": "d99eb85f-9b3f-407d-9740-4aab3ae9ea0b"
}
Exception in thread "main" java.lang.Exception: Parse FAIL
*/
728x90
728x90
'▶ Back-End > Java' 카테고리의 다른 글
JWE Example(nimbus) (0) | 2022.10.21 |
---|---|
Create RSA Keypair(.pem) (0) | 2022.10.21 |
Create UUID ver4 (0) | 2022.10.20 |
ArrayList 간단한 페이징 (0) | 2022.10.20 |
Java 환경변수 설정 (0) | 2022.05.10 |
댓글