Реализация двухфакторной аутентификации в веб-приложении Java - PullRequest
7 голосов
/ 13 сентября 2010

У меня есть существующее веб-приложение Java, работающее через IBM WebSphere (я не уверен в версии, но могу выяснить, помогает ли это), которое я ищу для реализации двухфакторной аутентификации с помощью.

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

Желательно минимальное влияние на конечного пользователя, но я бы хотел, чтобы администраторы не проходили через VPN-соединение.

Кто-нибудь знает о каких-либо продуктах, которые предоставляют API-интерфейсы Java, которые могут быть непосредственно интегрированы в существующее приложение или другие продукты, которые будут оказывать минимальное влияние? Я уже говорил с RSA SecurID, но их система не будет интегрироваться напрямую и потребует изменения инфраструктуры. Любые другие идеи / опыт с благодарностью.

Ответы [ 4 ]

3 голосов
/ 09 июня 2015

Для потомков я только что опубликовал свой простой класс утилит для двухфакторной аутентификации Java в Github . С его помощью вы можете сделать что-то вроде следующего:

TwoFactorAuthUtil twoFactorAuthUtil = new TwoFactorAuthUtil();

// To generate a secret use:
// String base32Secret = generateBase32Secret();
String base32Secret = "NY4A5CPJZ46LXZCP";
// now we can store this in the database associated with the account

// this is the name of the key which can be displayed by the authenticator program
String keyId = "user@j256.com";
System.out.println("Image url = " + twoFactorAuthUtil.qrImageUrl(keyId, base32Secret));
// we can display this image to the user to let them load it into their auth program

// we can use the code here and compare it against user input
String code = twoFactorAuthUtil.generateCurrentNumber(base32Secret);

// this little loop is here to show how the number changes over time
while (true) {
    long diff = TwoFactorAuthUtil.TIME_STEP_SECONDS
        - ((System.currentTimeMillis() / 1000) % TwoFactorAuthUtil.TIME_STEP_SECONDS);
    code = twoFactorAuthUtil.generateCurrentNumber(base32Secret);
    System.out.println("Secret code = " + code + ", change in " + diff + " seconds");
    Thread.sleep(1000);
}
1 голос
/ 13 сентября 2010

Если вы хотите двухфакторную аутентификацию через клиентский сертификат TLS, существует несколько аппаратных криптографических токенов. Java может загрузить хранилище PKCS # 11 из коробки, хотя может потребоваться некоторая конфигурация. От того, насколько сильно это зависит от конфигурации администратора, зависит от приложения (и иногда от того, насколько «заблокирован» терминал для вставки USB-токена или для устройства чтения карт).

Могут быть альтернативные решения, такие как токены одноразовых паролей (которые основаны не на сертификатах, а на уникальных паролях). Это кажется менее тяжелым для пользователей. Я должен признать, что никогда не пробовал, но этот проект может быть интересным: http://directory.apache.org/triplesec/ (Существуют также аппаратные OTP-брелоки, обычно от тех же производителей, которые делают карты RSA / USB-токены).

0 голосов
/ 05 марта 2012

Если вы можете использовать Spring Security, у нас есть плагин, который предлагает двухфакторную аутентификацию (физические и программные токены) - www.cloudseal.com

0 голосов
/ 17 мая 2011

У нас есть пакеты API для Java (и php, ruby, python и C #): http://www.wikidsystems.com/downloads/network-clients для системы строгой аутентификации WiKID. Эти пакеты LGPL, так что вы также можете использовать их в коммерческих продуктах. Они работают как с нашей версией сообщества с открытым исходным кодом, так и с коммерческой версией Enterprise.

НТН,

Ник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...