WedX - журнал о программировании и компьютерных науках

Как получить пароль от базовой аутентификации HTTP

Я использую HTTP-аутентификацию BASIC с Java.

Мой сервлет отправляет сообщение JMS, но мне нужно указать пользователя и пароль для аутентификации при создании соединения:

javax.jms.ConnectionFactory.createConnection(String username, String password)

Я могу получить имя пользователя из HttpServletRequest.getUserPrincipal (). Но, похоже, нет возможности восстановить пароль. Как мне решить эту проблему?


Ответы:


1

Пароль, о котором вы говорите, скорее всего, отличается от пароля, предоставленного пользователями при входе в систему. Хотя вариант использования не ясен из вопроса, но похоже, что вы пытаетесь использовать имя пользователя / пароль, предоставленные внешними пользователями, для создания подключения к JMS Connection Factory. Мне это не кажется архитектурно безопасным. Вы должны использовать только одну учетную запись для подключения к ConnectionFactory, которую необходимо защитить (относитесь к ней как к соединениям db). Лучше использовать JNDI для поиска ConnectionFactory и обходить управление именем пользователя / паролем.

Однако, если вам нужно использовать эту технику, вы можете использовать следующий блок кода. Я копирую его из проекта Gitblit, поскольку он был открыт в моем eclipse

Использование класса Java8 Base64:

final String authorization = httpRequest.getHeader("Authorization");
if (authorization != null && authorization.toLowerCase().startsWith("basic")) {
    // Authorization: Basic base64credentials
    String base64Credentials = authorization.substring("Basic".length()).trim();
    byte[] credDecoded = Base64.getDecoder().decode(base64Credentials);
    String credentials = new String(credDecoded, StandardCharsets.UTF_8);
    // credentials = username:password
    final String[] values = credentials.split(":", 2);
}
14.04.2013
  • Вы правы насчет архитектуры. С тех пор я отказался от этого подхода и просто принял подход javax.jms.ConnectionFactory.createConnection () без учетных данных. 15.04.2013
  • Спасибо. Это сработало, но с поправкой. Но вы не можете называть Base64 статическим классом. Я сделал: Base64 b = new Base64 (); Строковые учетные данные = новая строка (b.decode (base64Credentials), Charset.forName (UTF-8)); 08.07.2014
  • Обратите внимание, что тип авторизации (базовый) нечувствителен к регистру, как и все поля заголовка HTTP. См. w3.org/Protocols/rfc2616/rfc2616-sec4. html # sec4.2 Таким образом, приведенный выше код может завершиться ошибкой на `.startsWith (Basic), если в заголовках используются разные заглавные буквы. 15.02.2018
  • @AdriaanKoster Вы правы, что регистр не учитывается, но не потому, что это поле заголовка (это значение заголовка). Он нечувствителен к регистру, потому что RFC7235 говорит так: HTTP provides a simple challenge-response authentication framework that can be used by a server to challenge a client request and by a client to provide authentication information. **It uses a case-insensitive token as a means to identify the authentication scheme**, followed by additional information necessary for achieving authentication via that scheme. (курсив добавлен) 12.04.2018

  • 2

    Имя пользователя и пароль изначально были отправлены в заголовке HTTP Authorization (в кодировке base64), так что вы могли это использовать; но если пользователь поддерживает сеанс с использованием файлов cookie, он не обязательно будет отправлять этот заголовок каждый раз.

    14.04.2013
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]