- JWT 발급 Guide
- JWT 관련 서비스

< Access Token 발급 >
- 방법 1 ) app_id 로만 특정 application 에 해당하는 JWT 발급
https : // localhost : 5556/ rest / pub / apigateway / jwt / getJsonWebToken? app_id = 9502c862-9e67-4726-bc13-598df42c7fb6


- 방법 2 ) Custom Claim 을 추가하는 방법
[POST] /gateway/security/getJsonWebToken

- Payload 차이점 정리


- Sub : JWT를 요청한 로그인 한 유효한 IS 사용자
- aud : 구성의 대상 및 요청의 app_id (있는 경우)
- iss : 구성의 토큰 발급자
- nbf : 토큰을 사용하지 않아야 하는 시간
- exp : 토큰 만료 시간
- iat : 토큰이 발행되는 시간
- app_id : 요청에 있는 경우 애플리케이션 ID
- webMethods APIM 기준 시간 관련 Claim 들(nbf,exp,lat) 전부 UNIX TIME Format
- Gateway Administration > security > JWT/OAuth/OpenID 에 설정된 JWT Configuration 을 따라 JWT 발급

- 방법 1 은 aud에 app_id값이 추가되어 설정 ,방법 2는 aud가 sys:defaultApplication 되어있는 차이
- 추가 정리 자료 RFC7519 (JSON Web Token)
- Registered Claims 내용 정리
- iss : issuer , 토큰 발급자
- sub : subject , 제목
- aud : audience , 토큰의 대상자
- exp : expiration, 토큰의 만료 시간, 시간은 NumericDate 형식, epoch time(ms 단위), 현재시간보다 이후로 설정되어 있어야 함.
- nbf : not before, 이 시각이 지나기 전까지는 토큰이 처리되지 않음
- iat : issued at , 토큰이 발급 된 시간, 토큰의 age가 얼마나 되었는지 판단하는 옵션
- jti : JWT의 고유 식별자, 중복 적인 처리를 방지하기 위해 사용, 일회용 토큰에 사용하면 유용
- 커스텀 Claim 검증 테스트 (방법 2 사용)
- app_id 만 JWT default claims set 추가




> app_id 만 일치하면 다른 claim이 무슨 값이 들어가도 상관없이 인증 절차를 통과한다. (문제가 되지 않을지..)
- App에 추가 Identifier > Claim 을 설정 하여 테스트

- "name" : "cudo1" 추가하여 테스트

- 결과

- "name":"cudo2" 로 테스트

- 결과

>> 등록된 Identifier Claim 값은 Validation이 수행 되지만 , 등록되지 않은 Claim 값은 validation 이 수행되지 않음 (app_id Claim만 있다면 인증절차를 모두 통과)
- Signature 관련 정리
- RFC7515(JWS) <-> RFC7516(JWT) 차이 정리


- 규격에 정의된 ASCII 암호화(??) 를 사용하여 Signature 를 생성해야 하는지 (?)
- RFC7515 규격에는 다양한 암호화 기술을 사용하여 Signature를 생성하는 듯함, 상관이 없는건지...?

- 결론 및 질문
- app_id 만 사용한다면 방법 1 사용 , 추가적으로 Custom claim을 추가 한다면 방법2 사용
- 자율적 구성이지만, RFC7516 (JWT) 규격에는 Registered Claims 에 jti 가 포함 되어 있음, RFC7515 에 Claim 구성 어떻게 하는지 읽어 봐야함 ...... > example로 보았을 때는 특별히 Claim값이 반드시 들어가야하는 필수 값은 존재하지 않는 듯 함.

- 토큰 발급 시 Basic Auth (Administrator / Manage) 계정 사용 ( ? )
< 추가 Claim Set 관련 테스트 (방법2) >
->>> 추가 노트로 정리
< Refresh Token 발급 >
Refresh JWT 는 webMethods 에서 지원하지 않는 듯 함발급 받은 JWT 를 Refresh 할 때 OAuth2.0 Refresh Token 을 Validation 후 토큰을 갱신 하면서 같이 JWT도 재발급 받으면 되지 않을 까 (?)
- JWT 하나 발급 받아서 Refresh OAuth Token 과 매핑 -> 방법 1로 발급 받았을 때 동일한 JWT 발급 됨 -> 방법 2로 바꿔서 Refresh Token 임을 구분하는 Claim 추가