Какова правильная конфигурация аутентификации OpenGrok REST API?

#opengrok

Вопрос:

Согласно документации, API REST OpenGrok не проходит проверку подлинности на локальном хосте, но требует аутентификации из любого другого приложения.

В моей настройке K8S я хочу запустить OpenGrok (стандартный opengrok/docker:1.7 ) в качестве контейнера, но для самостоятельного обновления/проверки исходного кода, а также для повторной индексации после обновления исходного кода. У меня работает opengrok контейнер и src-update контейнер. Они делят 3 тома ( /opengrok/src , /opengrok/etc , /opengrok/data ).

opengrok Контейнер настроен со REST_TOKEN значением и SYNC_PERIOD_MINUTES значением 0 для отключения индексирования. src-update Контейнер запускает и обновляет кодовые базы, а затем выполняет opengrok-indexer повторную индексацию данных и уведомляет (с помощью -U опции) opengrok контейнер об изменении индекса. При opengrok-indexer запуске он индексируется нормально, но завершается ошибкой HTTP 401 при попытке ПОМЕСТИТЬ обновленную конфигурацию на сервер opengrok:

 2021-12-08 16:01:03.980 0000 SEVERE t1 Indexer.sendToConfigHost: Failed to send configuration to http://opengrok-service:8080 (is web application server running with opengrok deployed?) java.io.IOException: InboundJaxrsResponse{context=ClientResponse{method=PUT, uri=http://opengrok-service:8080/api/v1/configuration?reindex=true, status=401, reason=Unauthorized}} at org.opengrok.indexer.configuration.RuntimeEnvironment.writeConfiguration(RuntimeEnvironment.java:1462) at org.opengrok.indexer.index.Indexer.sendToConfigHost(Indexer.java:1157) at org.opengrok.indexer.index.Indexer.main(Indexer.java:383)  

Это команда, которую я выполняю в контейнере обновления исходного кода. Значение среды OPENGROK_REST_TOKEN -это то же значение, которое передается в контейнер opengrok, REST_TOKEN что и .

 opengrok-indexer   -J=-Djava.util.logging.config.file=/opt/opengrok/repo-mgmt/config/opengrok-logging.properties   -a /opengrok/lib/opengrok.jar --   --progress -c /usr/local/bin/ctags   -s /opengrok/src -d /opengrok/data -H -S -G   --token $OPENGROK_REST_TOKEN   -W /opengrok/etc/configuration.xml -U http://opengrok-service:8080  

Я посмотрел /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml файл в контейнере opengrok и не вижу там никакой конфигурации безопасности.

Что я делаю неправильно или чего не хватает в моей конфигурации? Каков наилучший способ обеспечить проверку подлинности, необходимую для REST API, из контейнера обновления исходного кода?

Ответ №1:

Вам нужно установить токен в configuration.xml файл (параметр-W) со следующими:

 lt;void property="authenticationTokens"gt;  lt;void method="add"gt;  lt;stringgt;TOKENlt;/stringgt;  lt;/voidgt; lt;/voidgt;