Bot

API 인증 준비 -> Server Token(ID 등록 방식) -> JWT 전자 서명(signature) -> RS256 암호화 방식 질문

조영용

2021.05.18읽음 4062

안녕하세요.

API 인증 준비 -> Server Token(ID 등록 방식) -> JWT 전자 서명(signature) -> RS256 암호화 방식 질문드립니다.
개발중에 문서를 참고 했는데 문서의 내용은 아래와 같습니다.

2. JWT 전자 서명(signature) - RFC-7515

전자 서명은 JWS(JSON Web Signature RFC-7515) 규약을 따른다.
앞서 생성했던 JWT header와 body의 byte array를 Developer Console에서 다운로드한 비밀키로 RSA SHA-256 알고리즘(header에서 정의한 RS256)을 사용하여 암호화하고 BASE64 인코딩한다.

JWT 헤더와 바디를 비밀키를 사용하여 RS256 암호화하라고 나와있습니다.

비밀키는 개발 콘솔에서 다운로드 받을 수 있습니다.

하지만, 문제는 RS256 암호화 방식은 비밀키와 짝을 이루는 공개키가 있어야 가능합니다.

문서에서는 공개키를 전혀 언급하고 있지 않습니다.

문서에서 JWT를 만들때 사용하라고 권고하는 라이브러리 중에 하나인 https://github.com/auth0/java-jwt 의 문서를 확인해보면 아래와 같습니다.

  • Example using RS256

RSAPublicKey publicKey = //Get the key instance
RSAPrivateKey privateKey = //Get the key instance
try {
    Algorithm algorithm = Algorithm.RSA256(publicKey, privateKey);
    String token = JWT.create()
        .withIssuer("auth0")
        .sign(algorithm);
} catch (JWTCreationException exception){
    //Invalid Signing configuration / Couldn't convert Claims.
}
개발 콘솔에서 제공하는 비밀키를 사용하면서 어떻게 RS256 방식의 암호화를 할 수 있나요?
제가 혹시 놓친 부분이 있다면 알려주세요.
감사합니다.

댓글1

  • 업데이트 된 답글입니다.

    branches

    전자서명을 복호화할 일이 없기 때문에 키는 비밀키 하나만 있으면 됩니다
    저는 nodejs를 쓰고있는데요 자바도 방법은 비슷합니다

    var jwt = require('jsonwebtoken');
    var fs = require('fs');
    var access_token;
    var FILENAME_KEY= "private_20210813070916.key";

    // sign with RSA SHA256
    var privateKey = fs.readFileSync(FILENAME_KEY);

    //JWT 전자 서명
    var token = jwt.sign({
       //JSON Claim set 세팅
       iss: SERVER_ID,
       iat: Math.floor(Date.now() / 1000),
       exp: Math.floor(Date.now() / 1000) + 60
    }, privateKey, { algorithm: 'RS256'});

    토큰발급URL을 이렇게 생성하고
    "https://auth.worksmobile.com/b/"+ APIID +"/server/token"

    아까생성한 토큰을 body에 넣어줍니다
    "grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=" + token

    이렇게 하면 인증이 완료됩니다

    2021.05.21

    0
이전 글메일 발송 - 첨부파일 한글 깨짐 오류
다음 글API 인증 준비에서 state는 무슨 값인가요?
목록

궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!