[11.x] Add support for previous apps keys in signed URL verification #51222
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Laravel 11 introduced the ability to add
app.previous_keys
to migrate the app-key for encryption transparently, added in #49962This PR adds the same support for signed URLs, by allowing URLs generated under one of the previous keys (listed in
app.previous_keys
) to be considered as valid.Implementation
The implementation iterates over the acceptable app keys, with the current app key first, and returns as soon as a valid
hmac
is found. Of course, signing a new URL always uses the current app key.To support this, I updated the default
$keyResolver
inUrlGenerator
(set inRoutingServiceProvider
) to return an array of keys. I can't see this return value being typed anywhere, and I kept support for single keys being returned, in case anyone injects their own key resolver.Inspiration
The idea for this PR comes from @valorin and the Securing Laravel newsletter, where the missing support for signed URLs was mentioned.