이 라이브러리 (node-jwks-rsa)를 사용하여 my auth0 jwks.json 파일에서 JWT 키를 가져 와서 인증 절차가 실제로 인증 기관에서 나온 후 id_token my 응용 프로그램이 검색하는지 확인합니다. 후드 아래에서JWT 공개 키 대 개인 키 서명 유효성 검사 - 차이점은 무엇입니까?
는합니다 (.jwks 파일에서 인수로 x50c 사용) 공개 키 PEM
export function certToPEM(cert) {
cert = cert.match(/.{1,64}/g).join('\n');
cert = `-----BEGIN CERTIFICATE-----\n${cert}\n-----END CERTIFICATE-----\n`;
return cert;
}
를 구축하기 위해이 방법을 사용합니다.
다음은 jsonwebtoken과 함께 사용하여 JWT (id_token)가 유효한지 확인합니다.
이 확인 방법은 jwks.json 파일의 모듈과 지수에서 개인 키 (RSA)를 생성하고 확인을 위해 대신 사용하는 것과 어떻게 다른가요? 개조 및 지수 (http://stackoverflow.com/questions/18835132/xml-to-pem-in-node-js 찍은)으로부터 PEM을 생성 데모 같은 기능은 또한 여기
(예를 들어,이 library 참조)
export function rsaPublicKeyToPEM(modulusB64, exponentB64) {
const modulus = new Buffer(modulusB64, 'base64');
const exponent = new Buffer(exponentB64, 'base64');
const modulusHex = prepadSigned(modulus.toString('hex'));
const exponentHex = prepadSigned(exponent.toString('hex'));
const modlen = modulusHex.length/2;
const explen = exponentHex.length/2;
const encodedModlen = encodeLengthHex(modlen);
const encodedExplen = encodeLengthHex(explen);
const encodedPubkey = '30' +
encodeLengthHex(modlen + explen + encodedModlen.length/2 + encodedExplen.length/2 + 2) +
'02' + encodedModlen + modulusHex +
'02' + encodedExplen + exponentHex;
const der = new Buffer(encodedPubkey, 'hex')
.toString('base64');
let pem = `-----BEGIN RSA PUBLIC KEY-----\n`;
pem += `${der.match(/.{1,64}/g).join('\n')}`;
pem += `\n-----END RSA PUBLIC KEY-----\n`;
return pem;
};
전술 jsonwebtoken 라이브러리 사용 JWT 확인할 수 - 중 하지만 왜? 두 검증 방법 모두 JWT 서명의 유효성을 검증 할 수 있다면 왜 둘 다 존재합니까? 둘 사이의 상반 관계는 무엇입니까? 하나가 다른 것보다 안전합니까? 무엇을 가장 완벽하게 검증해야합니까?
서명 확인에는 공개 키 (구성된) 만 사용됩니다. 두 라이브러리 모두에서 두 라이브러리는 해시를 계산하고 해시 서명의 유효성을 검사해야합니다. 유효성 검사가 제대로 수행 될 때까지 다른 사람보다 더 안전 할 이유가 없습니다. – gusto2
@ gusto2 - 나는 아직도 혼란 스럽다. https://jwt.io/의 대화식 디버거가 왜 위에서 설명한 공용 메서드와 공개 메서드를 사용하여 JWT 서명 유효성 검사를 할 수 있습니까? – TheFastCat
개인 키로 디지털 서명을 확인할 수 없습니다. 네가 묻고있는 것이 불분명하다. – EJP