728x90
반응형
JWS Create / Parse
*JWT 관련 자세한 설명 생략
▷ Example
/**
* JWS (JSON Web Signature) 생성 및 파싱 예시
*
* ▶ JWS (JSON Web Signature)
* → 서버의 PRIVATE KEY로 서명하여 토큰화한 것
* → claim 노출, 서명을 통해 데이터의 무결성 및 인증 보장
*
* ▶ JWT (JSON Web Token)
* → JWS & JWE를 포함
* → 서버와 클라이언트 간 정보를 주고받을 때 HTTP 요청 헤더에 JWT 토큰을 포함하여 인증 수행
* → 구성:
* → Header: 토큰의 타입 및 암호화 알고리즘
* → Payload: claim 정보 (name: value), 공개/비공개 설정 가능
* → registered claim: JWTClaimsSet 제공
* → public claim: 사용자 정의
* → private claim: 시스템 또는 조직에서 사용하는 클레임
* → Signature: PRIVATE KEY를 사용하여 서명 (JWS에서만 해당)
*/
public static void jwsExample() throws Exception {
/* JWS Header 정의: 사용할 알고리즘 설정 (HS512) */
JWSHeader header = new JWSHeader(JWSAlgorithm.HS512);
/* JWS Payload 정의 (Registered Claims 포함) */
JWTClaimsSet payload = new JWTClaimsSet.Builder()
.issuer("토큰 발급자")
.subject("토큰 제목")
.audience("토큰 대상자")
.expirationTime(new Date(System.currentTimeMillis() + 1000 * 60)) // 만료 시간
.issueTime(new Date()) // 발급 시간
.jwtID(UUID.randomUUID().toString()) // JWT 고유 식별자
.build();
// JWT Payload 내용 출력
System.out.println("> JWT Payload (registered claim) : " + payload.getClaims());
/* JWS 서명자 설정 (비밀키를 사용하여 서명 생성) */
String privateKey = "****************************PRIVATEKEY**************************"; // 실제 비밀키 사용 필요
JWSSigner signer = new MACSigner(privateKey);
SignedJWT jws = new SignedJWT(header, payload);
jws.sign(signer);
// 서명된 JWS 토큰 직렬화 및 출력
String serializedJws = jws.serialize();
System.out.println("> RESULT JWS: " + serializedJws);
/* JWS 토큰 파싱 */
SignedJWT signedJws = SignedJWT.parse(serializedJws);
// 서명 검증 (공개 키로 서명을 검증)
String publicKey = "****************************PUBLICKEY**************************"; // 실제 공개키 사용 필요
JWSVerifier verifier = new MACVerifier(publicKey);
// 서명 검증 후 결과 출력
if ( !signedJws.verify(verifier) ) {
System.out.println("> Parse FAIL: Signature verification failed.");
} else {
System.out.println("> Parse SUCCESS : " + signedJws.getJWTClaimsSet());
}
}
> JWT Payload (registered claim) : {
iss=토큰 발급자,
sub=토큰 제목,
aud=토큰 대상자,
exp=1666336203,
iat=1666336143,
jti=2d326b73-9989-4fac-98de-90a775ec1579
}
> RESULT JWS: eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiLthqDtgbAg7KCc66qpIiwiYXVkIjoi7Yag7YGwIOuMgOyDgeyekCIsImlzcyI6Iu2GoO2BsCDrsJzquInsnpAiLCJleHAiOjE2NjYyNTY5NTEsImlhdCI6MTY2NjI1Njg5MSwianRpIjoiZDk5ZWI4NWYtOWIzZi00MDd...
> Parse SUCCESS : {
iss=토큰 발급자,
sub=토큰 제목,
aud=토큰 대상자,
exp=1666336203,
iat=1666336143,
jti=2d326b73-9989-4fac-98de-90a775ec1579
}
> Parse FAIL: Signature verification failed.
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 |
Java 환경변수 설정 (0) | 2022.05.10 |
Java 11 버전 설치 방법 (0) | 2022.05.10 |
댓글