Как получить доступ к защищенным ресурсам в Play Silhouette с помощью JWT Authenticator - PullRequest
0 голосов
/ 27 апреля 2020

У меня аутентификация и авторизация Play with Silhouette, настроенные с использованием JWTAuthenticator. Этот аутентификатор работает, читая заголовок X-Auth-Token, который является jwt, чтобы идентифицировать пользователя в каждом запросе. Это прекрасно работает для конечных точек REST.

Теперь у меня есть изображения, которые могут быть доступны только владельцам, и я хотел бы использовать их в свойстве background-image css (это требование). В таком случае я не могу установить заголовок запроса, поэтому запрос будет отклонен.

Следующим естественным шагом является вставка токена в сам URL background-image в качестве параметра url. Однако я не знаю, как действовать на стороне сервера. Как я могу сказать JWTAuthenticator использовать токен в URL, если нет заголовка X-Auth-Token?

1 Ответ

0 голосов
/ 28 апреля 2020

Хорошо, я делюсь здесь своими фондами, так что, надеюсь, это поможет другим. При копании в силуэтном коде я обнаружил, что мы можем легко настроить, из какой части (частей) запроса (заголовок, строка запроса, ...) мы хотим прочитать токен. По умолчанию токен jwt считывается из заголовка X-Auth-Token, но мы можем настроить JWTAuthenticator для чтения токена также из переменной строки запроса:

    val config =
      configuration.underlying
        .as[JWTAuthenticatorSettings]("silhouette.authenticator")
        // this is the important line of code
        .copy(requestParts = Some(Seq(RequestPart.Headers, RequestPart.QueryString)))

    new JWTAuthenticatorService(config, None, encoder, idGenerator, clock)

Теперь, если вы хотите использовать защищенный ресурс за контроллером с silhouette.SecureAction, тогда вам просто нужно добавить X-Auth-Token в качестве параметра строки запроса к URL:

.my-class {
  background-image: url("/image?X-Auth-Token=........")
}
...