Как получить токен доступа, отправленный в виде заголовка с помощью Autentication Basic в Springboot

Я завершил большую часть проекта, но теперь я застрял с новой проблемой. Мне нужно извлечь токен доступа из запроса, который будет в заголовке в Authentication Basic. Это сбивает с толку, поскольку сначала я использовал простой метод GET и отправлял токен доступа в самом запросе и извлекал его с помощью @RequestParam. Я задавал аналогичный вопрос раньше, но это был простой запрос из самого запроса, и теперь я должен сделать это из заголовка.

 @GetMapping("/persons")
     public String loadPersons(@RequestParam("access_token") String access_token) throws  ParseException{
        String decode_token = pd.testDecodeJWT(access_token);
        String token = pd.jsondata(decode_token);
........................ More Code........................

Я хочу получить этот токен из запроса в формате Authentication Basic.

Я попробовал несколько руководств на YouTube, но, поскольку я уже почти полностью сделал свой проект, я хочу внести в него минимальные изменения, чтобы больше не возникало ошибок.

Заранее спасибо

Почему вы не использовали отдельный класс для обработки части аутентификации, которая будет обслуживать все HTTP-запросы, а не обращаться к токену в вашем классе контроллера. Попробуйте использовать пружинную безопасность в своем проекте, которая будет полезна при использовании аутентификации jwt. (Не стесняйтесь изменять код только потому, что вы выполнили большую его часть. Попробуйте использовать лучшие практики и лучшие доступные методы).

m-2127 22.06.2019 07:30

@ m-2127 m-2127 Это был мой самый первый проект Springboot, и я понятия не имел о функциях Springboot. Поскольку мне дали крайний срок, я не смог изучить большую часть этого, включая весеннюю безопасность. Спасибо за вашу помощь.

Sayanto Roy 22.06.2019 07:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
2
4 070
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы получить значение из заголовка HTTP, вы можете использовать @RequestHeader("headerValue").

Но что меня смущает в вашем вопросе, так это то, что вы используете обычную аутентификацию или JWT? Базовая аутентификация относится только к имени пользователя и паролю и не имеет ничего общего с токеном доступа. Требуется заголовок HTTP в формате:

Authorization: Basic <credentials>

где <credentials> это Base64Encode(username:password).

С другой стороны, если вы используете токен доступа, отформатированный в JWT, обычной практикой является использование Bearer в заголовке «Авторизация»:

Authorization: Bearer <JWT>

Итак, что бы вы ни использовали, я советую использовать @RequestHeader("Authorization"), чтобы сначала получить значение заголовка Authorization. Затем декодировать значение в соответствии с вашими фактическими механизмами аутентификации:

 @GetMapping("/persons")
 public String loadPersons(@RequestHeader("Authorization") String authHeader) throws  ParseException{
      //decode authHeader
}

Это сработало, но нельзя ли использовать Authentication Basic для JWT? как мой тренер говорит, что они будут использовать Basic для отправки токена jwt в качестве заголовка.

Sayanto Roy 22.06.2019 07:39

@Chaos просматривает вопрос это stackoverflow и отвечает на него, чтобы прояснить это.

m-2127 22.06.2019 08:05

Вы по-прежнему можете отправить JWT с помощью Authorization: Basic <JWT> , он все равно будет работать, но это не обычная аутентификация, поскольку у базовой аутентификации есть определенные требования к строке после Authorization: Basic . Также см. это для лучшего типа заголовка авторизации для JWT в обычной практике.

Ken Chan 22.06.2019 08:52

Другие вопросы по теме