Ответ 1
Обновление 2014/11/05. Для тех, кто здесь, первое место читайте ниже. Благодарим hans-zandbelt за отзывы. Он включен в обновленную версию. Настройка теперь использует предлагаемые улучшения и использует только mod_rewrite для перенаправления URL-адреса выхода gerrit в нужное место. Также обратите внимание, что вместо использования не-доменной части письма электронная почта используется без изменений. Это означает, что если у вас есть существующая настройка, вам нужно изменить сопоставления имени пользователя.
Для Дженкинса сделайте следующее:
- переместите ${jenkins_home}/users/youruser в ${jenkins_home}/users/youruser @yourdomain
- откройте файл ${jenkins_home}/config.xml "youruser" и замените его на youruser @yourdomain
Для Gerrit:
либо на самой машине (смените GERRIT_HOME на то, где она находится на вашем компьютере):
-
откройте базу данных sql одним из следующих способов:
-
[Рекомендуется] Либо через команду gerrit, доступную через ssh:
ssh gerrit.revault.ch gerrit gsql
-
ИЛИ на самом компьютере (смените GERRIT_HOME на то, где он находится на вашем компьютере):
export GERRIT_HOME=/var/gerrit_home pushd ${GERRIT_HOME} java -cp $(find . -name "h2*.jar") org.h2.tools.Shell -url "jdbc:h2:file:${GERRIT_HOME}/db/ReviewDB;IFEXISTS=TRUE"
-
-
показать внешний
select * from ACCOUNT_EXTERNAL_IDS;
-
внешние идентификаторы отображают вашу учетную запись на разные имена пользователей, электронные письма и т.д.
- те, которые имеют префикс с именем пользователя: например. имя пользователя: [email protected] для имени пользователя ssh/git
- те, которые префиксны с gerrit: например. gerrit: [email protected] используются для веб-интерфейса.
-
для данного account_id вы можете просто добавить новые сопоставления для существующих пользователей с помощью sql: например.
insert into ACCOUNT_EXTERNAL_IDS values(1000032, NULL,NULL, 'username:[email protected]'); insert into ACCOUNT_EXTERNAL_IDS values(1000032, NULL,NULL, 'gerrit:[email protected]');
Решение
Вы можете использовать Apache для проверки подлинности обратного прокси-сервера:
Геррит
Предполагая, что вы уже установили Gerrit, и он прослушивает адрес 10.10.10.10:8080. Вам нужно будет настроить gerrit для использования базовой аутентификации, секции [auth] в вашем $ {gerrit_installation}/etc/gerrit.config должен выглядеть следующим образом:
[gerrit]
basePath = git
canonicalWebUrl = http://gerrit.example.com
[database]
type = h2
database = db/ReviewDB
[index]
type = LUCENE
[auth]
type = HTTP
emailFormat = {0}@example.com
httpHeader = X-Forwarded-User
[sendemail]
smtpServer = localhost
[container]
user = gerrit
javaHome = /usr/lib/jvm/java-8-oracle/jre
[sshd]
listenAddress = 10.10.10.10:2222
[httpd]
listenUrl = http://10.10.10.10:8080/
[cache]
directory = cache
Имя пользователя будет в заголовке X-Forwarded-User. То, как Apache будет перенаправлять имя пользователя Геррит.
В Apache мы будем использовать mod_auth_openidc, который поддерживает oauth2. Для получения дополнительной информации и примеры документов относятся к https://github.com/pingidentity/mod_auth_openidc. На недавнем Ubuntu установка выглядит следующим образом:
sudo aptitude install libjansson-dev apache2 apache2-dev libcurl4-openssl-dev build-essential autoconf libhiredis-dev
git clone https://github.com/pingidentity/mod_auth_openidc.git
cd mod_auth_openidc
./autogen.sh
./configure
make
sudo make install
sudo a2enmod auth_openidc
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod headers
sudo a2enmod rewrite
Вам нужно будет добавить конфигурацию сайта, например. gerrit.conf, аналогичный приведенному ниже (возможно, вам тоже нужен TLS) в /etc/apache 2/sites-available и активировать его с помощью:
sudo a2ensite gerrit.conf
Файл/etc/apache2/sites-available/gerrit.conf выглядит так:
<VirtualHost *:80>
ServerName gerrit.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
OIDCProviderMetadataURL https://accounts.google.com/.well-known/openid-configuration
OIDCClientID <from api console>
OIDCClientSecret <from api console>
OIDCScope "openid email profile"
OIDCRedirectURI http://gerrit.example.com/oauth2callback
OIDCCryptoPassphrase <generate long random passphrase here, no sure if used>
OIDCSessionInactivityTimeout 600
OIDCCookiePath /
OIDCAuthRequestParams hd=example.com
OIDCRemoteUserClaim email
OIDCAuthNHeader X-Forwarded-User
RewriteEngine On
#LogLevel alert rewrite:trace2
RewriteRule ^/logout$ /oauth2callback?logout=http://gerrit.example.com/ [R]
ProxyPass / http://gerrit.example.com:8080/ nocanon
ProxyPassReverse / http://gerrit.example.com:8080/
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy http://gerrit.example.com:8080/*>
# add rewrites here if necessary
</Proxy>
<Location />
AuthType openid-connect
Require claim hd:example.com
Require valid-user
</Location>
</VirtualHost>
Чтобы получить параметры OIDCClientID и OIDCClientSecret, перейдите в консоль api в https://console.developers.google.com/project. Учетные данные находятся в контексте проекта, если вы еще не создали проект. Например. Пример-он-аутентификация
В проекте перейдите к API и auth:
- В API-интерфейсах активируется API Google+.
- В разделе "Учетные данные" OAuth создает новый идентификатор клиента.
- Заполните OIDCClientID и OIDCClientSecret в вашей конфигурации apache (например, gerrit.conf)
- В окне "Согласие" введите имя электронной почты и продукта (вы получите сообщение об ошибке, если вы этого не сделаете)
service apache2 restart
Вы должны быть готовы!
Дженкинс
Предполагая, что вы уже установили Дженкинса, и он прослушивает 10.10.10.11:8080.
Для Дженкинса конфигурация почти идентична. Вам нужно будет установить и активировать плагин Reverse Proxy Auth http://wiki.jenkins-ci.org/display/JENKINS/Reverse+Proxy+Auth+Plugin. В разделе "Настройка глобальной безопасности" проверьте радиостанцию "HTTP Header by reverse proxy".
Значения по умолчанию соответствуют приведенной ниже конфигурации. Вам нужно будет создать учетные данные, соответствующие имени хоста jenkins в консоли api https://console.developers.google.com/project. Сообщайте о них в свою конфигурацию, как и раньше (например, jenkins.conf). Это должно быть все.
<VirtualHost *:80>
ServerName jenkins.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
OIDCProviderMetadataURL https://accounts.google.com/.well-known/openid-configuration
OIDCClientID <from api console>
OIDCClientSecret <from api console>
OIDCScope "openid email profile"
OIDCRedirectURI http://jenkins.example.com/oauth2callback
OIDCCryptoPassphrase <generate long random passphrase here, no sure if used>
OIDCSessionInactivityTimeout 600
OIDCCookiePath /
OIDCAuthRequestParams hd=example.com
OIDCRemoteUserClaim email
OIDCAuthNHeader X-Forwarded-User
ProxyPass / http://jenkins.example.com:8080/ nocanon
ProxyPassReverse / http://jenkins.example.com:8080/
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy http://jenkins.example.com:8080/*>
# add rewrites here if necessary
</Proxy>
<Location />
AuthType openid-connect
Require claim hd:example.com
Require valid-user
</Location>
<Location ~ "^/(cli|jnlpJars|subversion|whoAmI|computer/[^/]+/slave-agent.jnlp|tcpSlaveAgentListener)">
Satisfy Any
Allow from all
</Location>
</VirtualHost>
В настоящее время поддержка mod_auth_openidc для групп не поддерживается. Если вам нужны группы, вы можете установить LDAP, который хранит их (но это, вероятно, не то, что вы хотите, так как вы используете аутентификацию Google), или подождите, пока он будет поддерживаться mod_auth_openidc.