Интегрированная аутентификация Nant, Vault и Windows - PullRequest
2 голосов
/ 12 мая 2009

Я хочу выполнить ряд задач в SourceGear Vault (V4.1.4) с помощью Nant (V0.86.3317.0).

Есть ли способ заставить Vault использовать аутентификацию Windows от Nant для создания соединения?

Блок Nant, который я использую для инициализации подключения к хранилищу:

<target name="InitialiseVaultSettings">
<echo>InitialiseVaultSettings</echo>
<vaultsetloginoptions user="${vault.Username}" password="${vault.Password}" URL="${vault.Host}" repository="${vault.Repository}" />
<vaultsetworkingfolder repositoryFolderPath="${vault.Folder}" diskPath="${vault.WorkingDirectory}" createDiskPath="true" />

Поскольку я работаю над проектом с другими разработчиками, жесткое кодирование имен пользователей и паролей в файл сборки Nant не является хорошей идеей. И username, и password являются обязательными параметрами в команде vaultsetloginoptions.

Другие альтернативы (все с уловами) включают:

(a) Закрепите учетную запись «Администратор» в свойствах Nant и войдите в хранилище, используя это. Это не так уж и здорово, так как мы теряем контрольный журнал о том, кто отвечает за операции заезда / выезда, которые выполняет скрипт nant. Это также вызывает проблемы, когда решение извлекает файлы (часть сценария гарантирует, что все файлы возвращаются в систему контроля версий перед созданием метки в Vault).

(b) Используйте скрипт C # из кода Nant для динамической установки свойств имени пользователя и пароля ... за исключением того, что у нас возникла проблема с получением пароля от пользователя все еще

(c) Считайте информацию о сохраненном профиле из клиента Vault и подключитесь с помощью этого (за исключением того, что я не уверен, где она хранится).

Спасибо за внимание.

Ответы [ 3 ]

3 голосов
/ 19 мая 2009

Я не знаком с Убежищем, поэтому, пожалуйста, простите за потенциальную неопределенность этого ответа. Я много работал с NAnt, и все, что выполняется (задачи, execs и т. Д.), Имеет потенциал для работы в интегрированном режиме аутентификации.

В конце концов, аутентификация передается тому, кто запускает родительский процесс NAnt. При этом, это может быть признаком того, что задачи Vault в NAnt не поддерживают встроенную аутентификацию? Это означает, что если vaultsetloginoptions задача требует аргументов пользователя и пароля, то нет хорошего способа передачи учетных данных (как вы указали).

Если не будет обходных путей для потенциала, которого не хватает в задачах Vault для NAnt, можно использовать задачу <exec> для вызова версии их командной строки инструмент на стороне клиента (даже не уверен, есть ли он). Если это опция, встроенная аутентификация автоматически включается, если пользователь, выполняющий процесс NAnt, совпадает с пользователем, которому необходимо подключиться к Vault.

Нам пришлось сделать это для нескольких вещей, с которыми мы интегрируемся в процесс сборки. Мы либо выполнили exec'd для версии командной строки, либо написали свои собственные задачи, расширив инфраструктуру NAnt. В любом случае, это должно быть возможно.

Обновление

Некоторые осматривали форумы Vault, и кажется, что интеграция AD - это просто способ заставить Vault Client запрашивать пользователя и передавать его на сервер. С форума :

Клиент Vault всегда будет запрашивать для имени пользователя / пароля. Наше объявление интеграция ограничена сервером проверка того, что пароль введен соответствует паролю в Active Каталог.

Следовательно, для клиента нет истинного способа передавать информацию проверки подлинности Windows встроенным способом. Клиентская программа Vault требует ввода имени пользователя и пароля при работе в режиме AD. К сожалению, казалось бы, без сохранения имени пользователя / пароля шансы на интеграцию seamless NAnt - это далеко.

1 голос
/ 15 июня 2009

Я успешно реализовал прототип, чтобы обойти эту проблему.

Полный исходный код и двоичные файлы для обходного пути, описанного ниже, можно найти здесь:

Расширения для входа в хранилище

Я создал несколько пользовательских задач и функций NAnt.

<VaultLogin> проверяет реестр Windows на наличие ранее сохраненной информации об имени пользователя и пароле. Если он не найден, он запрашивает у пользователя окно входа в систему. Он сохраняет записи в двух функциях и очищает реестр (в случае сбоя входа в систему - см. <SaveVaultLogin> ниже):

${VaultLoginFunctions::UserName()}
${VaultLoginFunctions::Password()}

Задача <vaultsetloginoptions> может использовать функции:

<vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />

После вызова задачи <vaultsetloginoptions> мы затем вызываем задачу <SaveVaultLogin>, которая записывает значения имени пользователя и пароля в реестр. Это гарантирует, что будут сохранены только успешные данные аутентификации (так как сценарий завершается ошибкой при задании неправильного имени пользователя и пароля.

Это блок кода вместе взятый:

  <target name="InitialiseVaultSettings">
<echo>InitialiseVaultSettings</echo>

<loadtasks assembly="CompassHealth.NAntExtensions.Tasks.dll" />

<VaultLoginGet />
<echo message="UserName = ${VaultLoginFunctions::UserName()}" />

<vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />

<vaultsetworkingfolder repositoryFolderPath="${vault.Folder}" diskPath="${vault.WorkingDirectory}" createDiskPath="true" />


<!-- need to save the login here, as it is cleared once VaultLoginGet is called, this ensures that only correct username and password are stored -->
<VaultLoginSave />    

Обновление: ссылка на двоичные файлы и источник для обхода теперь в верхней части сообщения.

0 голосов
/ 31 мая 2009

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

Мое текущее мышление соответствует (б) выше.

Я создам библиотеку, которую можно будет вызывать из сценария Nant, запрашивая имя пользователя и пароль Vault для текущего пользователя Windows.

Библиотека будет искать в записи Resigstry ранее введенное имя пользователя Vault и логин для этого пользователя Windows. Если он существует, он будет передан в сценарий без какого-либо взаимодействия с пользователем.

Если это имя пользователя / пароль не удается войти в хранилище или если оно не существует, библиотека предоставит пользователю диалоговое окно для ввода текущего имени пользователя и пароля в хранилище.

Запись пользователя будет храниться в реестре (в зашифрованном виде), то есть ее нужно вводить только один раз при каждом изменении имени пользователя и пароля в Vault.

Не идеальное решение, но оно должно быть относительно простым и достаточно приемлемым.

Что вы думаете?

...