• 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 사용)


  1. app_id 만 JWT default claims set 추가





> app_id 만 일치하면 다른 claim이 무슨 값이 들어가도 상관없이 인증 절차를 통과한다. (문제가 되지 않을지..)


  1. 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 추가