diff --git a/README.md b/README.md index 20714ec5..46d23684 100644 --- a/README.md +++ b/README.md @@ -495,7 +495,7 @@ JWT.decode token, hmac_secret, true, { required_claims: ['exp'], algorithm: 'HS2 JWK is a JSON structure representing a cryptographic key. Currently only supports RSA public keys. ```ruby -jwk = JWT::JWK.new(OpenSSL::PKey::RSA.new(2048)) +jwk = JWT::JWK.new(OpenSSL::PKey::RSA.new(2048), "optional-kid") payload, headers = { data: 'data' }, { kid: jwk.kid } token = JWT.encode(payload, jwk.keypair, 'RS512', headers) diff --git a/lib/jwt/jwk.rb b/lib/jwt/jwk.rb index 5219d7c1..0c1a9cab 100644 --- a/lib/jwt/jwk.rb +++ b/lib/jwt/jwk.rb @@ -14,10 +14,10 @@ def import(jwk_data) end.import(jwk_data) end - def create_from(keypair) + def create_from(keypair, kid = nil) mappings.fetch(keypair.class) do |klass| raise JWT::JWKError, "Cannot create JWK from a #{klass.name}" - end.new(keypair) + end.new(keypair, kid) end def classes diff --git a/spec/jwk_spec.rb b/spec/jwk_spec.rb index 1fc606f0..e6a234ba 100644 --- a/spec/jwk_spec.rb +++ b/spec/jwk_spec.rb @@ -41,7 +41,8 @@ end describe '.new' do - subject { described_class.new(keypair) } + let(:kid) { nil } + subject { described_class.new(keypair, kid) } context 'when RSA key is given' do let(:keypair) { rsa_key } @@ -57,5 +58,13 @@ let(:keypair) { ec_key } it { is_expected.to be_a ::JWT::JWK::EC } end + + context 'when kid is given' do + let(:keypair) { rsa_key } + let(:kid) { "CUSTOM_KID" } + it 'sets the kid' do + expect(subject.kid).to eq(kid) + end + end end end