Skip to content

Commit 0ffe471

Browse files
use same leeway for exp and nbf
1 parent 7b09b25 commit 0ffe471

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

lib/shopify_api/auth/jwt_payload.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,7 @@ def ==(other)
7373

7474
sig { params(token: String, api_secret_key: String).returns(T::Hash[String, T.untyped]) }
7575
def decode_token(token, api_secret_key)
76-
JWT.decode(token, api_secret_key, true,
77-
{ exp_leeway: JWT_EXPIRATION_LEEWAY, algorithm: "HS256" })[0]
76+
JWT.decode(token, api_secret_key, true, leeway: JWT_EXPIRATION_LEEWAY, algorithm: "HS256")[0]
7877
rescue JWT::DecodeError => err
7978
raise ShopifyAPI::Errors::InvalidJwtTokenError, "Error decoding session token: #{err.message}"
8079
end

test/auth/jwt_payload_test.rb

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def test_decode_jwt_payload_fails_with_expired_token
7676

7777
def test_decode_jwt_payload_fails_if_not_activated_yet
7878
payload = @jwt_payload.dup
79-
payload[:nbf] = (Time.now + 10).to_i
79+
payload[:nbf] = (Time.now + 12).to_i
8080
jwt_token = JWT.encode(payload, ShopifyAPI::Context.api_secret_key, "HS256")
8181
assert_raises(ShopifyAPI::Errors::InvalidJwtTokenError) do
8282
ShopifyAPI::Auth::JwtPayload.new(jwt_token)
@@ -92,6 +92,44 @@ def test_decode_jwt_payload_fails_with_invalid_api_key
9292
ShopifyAPI::Auth::JwtPayload.new(jwt_token)
9393
end
9494
end
95+
96+
def test_decode_jwt_payload_succeeds_with_expiration_in_the_past_within_10s_leeway
97+
payload = @jwt_payload.merge(exp: Time.now.to_i - 8)
98+
jwt_token = JWT.encode(payload, ShopifyAPI::Context.api_secret_key, "HS256")
99+
100+
decoded = ShopifyAPI::Auth::JwtPayload.new(jwt_token)
101+
102+
assert_equal(payload, {
103+
iss: decoded.iss,
104+
dest: decoded.dest,
105+
aud: decoded.aud,
106+
sub: decoded.sub,
107+
exp: decoded.exp,
108+
nbf: decoded.nbf,
109+
iat: decoded.iat,
110+
jti: decoded.jti,
111+
sid: decoded.sid,
112+
})
113+
end
114+
115+
def test_decode_jwt_payload_succeeds_with_not_before_in_the_future_within_10s_leeway
116+
payload = @jwt_payload.merge(nbf: Time.now.to_i + 8)
117+
jwt_token = JWT.encode(payload, ShopifyAPI::Context.api_secret_key, "HS256")
118+
119+
decoded = ShopifyAPI::Auth::JwtPayload.new(jwt_token)
120+
121+
assert_equal(payload, {
122+
iss: decoded.iss,
123+
dest: decoded.dest,
124+
aud: decoded.aud,
125+
sub: decoded.sub,
126+
exp: decoded.exp,
127+
nbf: decoded.nbf,
128+
iat: decoded.iat,
129+
jti: decoded.jti,
130+
sid: decoded.sid,
131+
})
132+
end
95133
end
96134
end
97135
end

0 commit comments

Comments
 (0)