Статьи

Уровень безопасности для NutchServer

Я работал над уровнем безопасности для NutchServer из Apache Nutch в качестве своего проекта GSoC 2016 и закончил его. В этом посте я объясню, как это работает и как его использовать. Прежде всего, я предлагаю вам прочитать мои предыдущие посты о моем принятии GSoC 2016: http://furkankamaci.com/gsoc-2016-acceptance-for-apache-nutch/, если вы еще не читали его.

Apache Nutch — это расширяемый и масштабируемый программный проект с открытым исходным кодом. Происходящий из Apache Lucene, проект диверсифицирован и теперь включает две кодовые базы, а именно:

Nutch 1.x: хорошо продуманный, готовый к производству гусеничный ход. 1.x обеспечивает тонкую настройку, опираясь на структуры данных Apache Hadoop, которые отлично подходят для пакетной обработки.

Nutch 2.x: появляющаяся альтернатива, берущая прямое вдохновение от 1.x, но отличающаяся в одной ключевой области; хранилище абстрагируется от любого конкретного базового хранилища данных с помощью Apache Gora для обработки объекта с постоянными отображениями. Это означает, что мы можем реализовать чрезвычайно гибкую модель / стек для хранения всего (время выборки, статус, контент, проанализированный текст, исходящие ссылки, входящие ссылки и т. Д.) В ряде решений для хранения данных NoSQL.

Nutch 2.x имел REST API, но на нем не было уровня безопасности. Я реализовал базовую аутентификацию, дайджест-аутентификацию, поддержку SSL в качестве механизмов аутентификации, а также поддержку детальной авторизации в NutchServer.

Если вы хотите включить защиту в своем NutchServer API, вы должны сделать следующее:

  1. Включите безопасность в файле nutch-site.xml, установив для свойства : restapi.auth значение BASIC , DIGEST или SSL . НЕТ по умолчанию и не обеспечивает безопасность.
  2. Установите свойство restapi.auth.users, если вы выбрали BASIC или DIGEST в качестве типа аутентификации. Имя пользователя, пароль и роль должны быть разделены символом канала (|). Каждый пользователь должен быть разделен запятой (,). т.е. admin | admin | admin, пользователь | пользователь | пользователь. По умолчанию admin | admin | admin, пользователь | пользователь | пользователь
  3. Задайте свойства restapi.auth.ssl.storepath , restapi.auth.ssl.storepass и restapi.auth.ssl.keypass, если вы выбрали SSL в качестве режима аутентификации в свойстве restapi.auth .

Вы можете следовать этим путем, когда вы хотите подключиться к NutchServer API через ваш клиентский код:

1. Базовая аутентификация

1
2
3
4
5
6
7
8
ClientResource resource = new ClientResource(protocol + "://" + domain + ":" + port + path);
resource.setChallengeResponse(challengeScheme, username, password);
 
try {
  resource.get();
} catch (ResourceException rex) {
  //catch it
}

2. Дайджест-аутентификация

Используйте тот же код на шаге 1 и добавьте их после него:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Use server's data to complete the challengeResponse object
ChallengeRequest digestChallengeRequest = retrieveDigestChallengeRequest(resource);
ChallengeResponse challengeResponse = new ChallengeResponse(digestChallengeRequest, resource.getResponse(),
username, password.toCharArray());
 
resource.setChallengeResponse(challengeResponse);
try {
  resource.get();
} catch (ResourceException rex) {
  //catch it
}
 
...
 
private ChallengeRequest retrieveDigestChallengeRequest (ClientResource resource) {
  ChallengeRequest digestChallengeRequest = null;
  for (ChallengeRequest cr : resource.getChallengeRequests()) {
    if (ChallengeScheme.HTTP_DIGEST.equals(cr.getScheme())) {
      digestChallengeRequest = cr;
      break;
    }
  }
  return digestChallengeRequest;
}

3. SSL

Выполните ту же процедуру в разделе Базовая аутентификация, но не забудьте добавить SSL-сертификат в хранилище доверенных сертификатов.

NutchServer предоставляет доступ ко многим функциям через свой REST API. Реализация аутентификации и авторизации позволяет пользователям общаться с ним безопасным способом.