.NET을 사용하여 RS256 알고리즘으로 JWT 토큰에 서명하려고 합니다 openssl
. 다음 예시 토큰을 사용하세요.
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
당RFC 7518, RS256은 사용된 서명이 "SHA-256을 사용하는 RSASSA-PKCS1-v1_5"임을 의미합니다. 내 이해는 다음과 같은 사용이 openssl dgst
가능하다는 것입니다.
# generate the key
openssl genrsa -out private.pem 2048
# generate the signature
echo 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' | \
openssl dgst -sha256 -sign private.pem -binary | \
openssl base64 | \
tr -- '+/=' '-_ '
그러나 jwt.io를 사용하여 확인하려고 하면 잘못된 서명이 발생합니다. 또한, 동일한 개인 키를 사용하여 서명을 생성하기 위해 jwt.io를 사용하면 완전히 다른 서명이 생성됩니다.
내가 도대체 뭘 잘못하고있는 겁니까? openssl dgst
이 토큰에 서명하는 올바른 방법 인가요 ?
답변1
echo
인수를 줄로 표시합니다. 즉, 개행 문자를 추가한다는 뜻입니다. 일부 시스템이나 쉘에서는 -n
이를 억제하지만printf '%s' 'string'
확실히 정확하다.
# generate the key
openssl genrsa -out private.pem 2048
# generate the signature
printf '%s' 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' | \
openssl dgst -sha256 -sign private.pem -binary | \
openssl base64 | \
tr -- '+/=' '-_ '