API 인증 준비 -> Server Token(ID 등록 방식) -> JWT 전자 서명(signature) -> RS256 암호화 방식 질문
안녕하세요.
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
궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!