Что ж, если вы используете httpOnly
конфигурацию ( и вам нужно !), То невозможно передать собственный файл аутентификации Play Play для загрузки.
То, что я сделал, было:
1. Не защищайте контроллер изображений с помощью @With(Secure.class)
, а вместо этого используйте before method
:
@Before(unless = "uploadPost")
public static void before() throws Throwable {
Secure.checkAccess();
}
2. Передайте два параметра от контроллера, который отображает страницу с плагином загрузки: userId и signatureUserId
String userIdSignature = Crypto.sign(Long.toString(user.id));
render(..., user.id, userIdSignature);
3. Передайте эти два параметра для загрузки и в метод uploadPost
public static void uploadPost(Upload upload, long userId, String userIdSignature) {
assertEquals(userIdSignature, Crypto.sign(Long.toString(userId)),
"Failed to authenticate user ID " + userId);
Если по какой-то причине вы не хотите, чтобы клиент знал свой идентификатор пользователя, альтернативой подписи является шифрование идентификатора пользователя.
Обратите внимание, что вы все еще подвержены атакам воспроизведения с использованием этого метода, но я считаю, что это общая проблема с Play (я могу ошибаться по этому поводу). Вы можете добавить срок годности к подписи, чтобы ограничить ущерб.