2012-06-13 19 views
5

Como seguimiento de una pregunta anterior, pregunté: How to pass username and password in TeamCity REST API, me gustaría verificar algo.Inicie sesión en el servidor de TeamCity utilizando API REST sin pasar credenciales en la url

¿Alguien me puede decir si es posible acceder a la API REST de TeamCity de una manera más segura, en lugar de pasar el nombre de usuario y la contraseña en la url?

Me parece una locura que las credenciales pasadas en la url sean la única forma, ya que es tan fácil para un rastreador tener en sus manos la url y usar las credenciales mismas.

Respuesta

2

He hecho un poco más de investigación con esto y no parece muy prometedor.

me encontré con el siguiente hilo en los foros de la comunidad TeamCity:

Resto de autenticación de API integrado

http://devnet.jetbrains.net/message/5461520#5461520

Otro usuario había hecho una pregunta similar a la mía y la respuesta fue que HTTP básica la autenticación es actualmente la única opción. Aunque puede usar la autenticación NTLM, eso se adapta a la interfaz de usuario web front-end, no a la API REST.

He preguntado en el foro si es posible usar NTLM a través de la API REST. No he tenido una respuesta, pero puedo imaginar que no es posible, lo que se esperaría en este caso.

8

nos enfrentamos al mismo problema y yo pasamos un poco de tiempo para ver cómo podemos resolver este problema y encontrar una manera:

Haces un encuentro en la pantalla inicial (/ntlmLogin.html) - podrás capaz de identificar al usuario que usa NTLM.
Luego guarda la cookie que TeamCity le brinda.
Ahora usa la cookie para llegar a la API.

Vea https://github.com/eduaquiles/TeamCityNtlmApiWrapper con un ejemplo muy simple sobre cómo hacer esto.

+0

¿Cómo los mantienes frescos? – abourget

+0

¿Cómo mantenemos la cookie fresca? No estábamos haciendo ninguna conexión a largo plazo con TC, por lo que nunca llegamos al punto en que la cookie ya no era válida. Pero si tuviéramos que hacerlo, necesitaríamos hacer un chequeo, y en el caso de un 401, enviaríamos credenciales nuevamente. Por cierto, no estoy trabajando con TeamCity desde hace 2 años, por lo que no sé si la solución aún se aplica. –

2

Según Eduardo Aquiles, si configura su servidor TeamCity para admitir la autenticación HTTP NTLM (TeamCity 8.x NTLM HTTP Authentication), puede obtener una cookie de sesión (TCSESSIONID) desde la URL /ntlmLogin.html y usar eso para autenticar contra la API REST.

He tenido que hacer algo similar para obtener el estado fijado de compilaciones. Aquí está la PowerShell utilicé:

function Get-TeamCityNtlmAuthCookie() 
{ 
    param([string] $serverUrl) 
    $url = "$serverUrl/ntlmLogin.html"; 
    $cookies = new-object System.Net.CookieContainer; 
    $request = [System.Net.WebRequest]::Create($url); 
    $request.CookieContainer = $cookies; 
    $request.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials; 
    $request.PreAuthenticate = $true; 
    $response = $request.GetResponse(); 
    return $cookies; 
} 

function Get-TeamCityBuildPinnedState() 
{ 
    param([string] $serverUrl, [string] $buildTypeId) 
    # get a session cookie to use with the rest api 
    $cookies = Get-TeamCityNtlmAuthCookie $serverUrl; 
    # query the rest api using the session cookie for authentication 
    $url = "$serverUrl/httpAuth/app/rest/builds/id:$buildTypeId/pin/"; 
    $request = [System.Net.WebRequest]::Create($url); 
    $request.CookieContainer = $cookies; 
    $response = $request.GetResponse(); 
    $stream = $response.GetResponseStream(); 
    $reader = new-object System.IO.StreamReader($stream); 
    $text = $reader.ReadToEnd(); 
    $reader.Close(); 
    return [bool]::Parse($text); 
} 

$myServerUrl = "http://myTeamCityServer"; 
$myBuildId = "6"; 

$pinned = Get-TeamCityBuildPinnedState $myServerUrl $myBuildId; 
write-host $pinned; 

Nota: No estoy seguro de si esto es apoyado oficialmente por JetBrains, por lo que podría encontrar que se rompe en una versión futura de TeamCity, pero actualmente trabaja en contra de la versión 8.0.2 (compilación 27482).

+0

Gracias por su respuesta.Lamentablemente, ya no trabajo para la empresa que usó TeamCity en el entorno, así que puedo intentar su sugerencia. Sin embargo, aprecio tu aporte :) –

Cuestiones relacionadas