作为后续到以前的问题,我问: 如何在TeamCity的REST API通过用户名和密码 ,我想检查的东西。
谁能告诉我,如果有可能访问一个更安全的方式TeamCity的REST API,而不是通过用户名和密码的网址是什么?
它只是似乎疯了,我认为传递凭据的URL是唯一的方法,因为它是那么容易的嗅探器获得的URL他们的手和使用的凭据自己。
作为后续到以前的问题,我问: 如何在TeamCity的REST API通过用户名和密码 ,我想检查的东西。
谁能告诉我,如果有可能访问一个更安全的方式TeamCity的REST API,而不是通过用户名和密码的网址是什么?
它只是似乎疯了,我认为传递凭据的URL是唯一的方法,因为它是那么容易的嗅探器获得的URL他们的手和使用的凭据自己。
我们面临着同样的问题,我花了一些时间,看看我们如何能够解决这一问题,并找到了一种方法:
你在初始屏幕(/ntlmLogin.html)的获取 - 你就可以识别使用NTLM用户。
然后你保存的TeamCity提供给您的cookie。
现在,您使用cookie来达到API。
见https://github.com/eduaquiles/TeamCityNtlmApiWrapper就如何做到这一点很简单的例子。
我已经做了多一些与此周围挖掘,并没有显得过于乐观。
我发现在TeamCity的社区论坛以下主题:
REST API身份验证集成
http://devnet.jetbrains.net/message/5461520#5461520
另一位用户问过类似的问题,以挖掘和响应是基本的HTTP认证是目前唯一的选择。 虽然你可以使用NTLM身份验证,即朝向前端的Web UI,而不是REST API定制。
我已要求在论坛上通过REST API使用NTLM是否是可能的。 我已经没有答复,但我可以想像,这是不可能的,这会在这种情况下,可以预期的。
按照爱德华Aquiles,如果您配置的TeamCity服务器支持HTTP NTLM身份验证( TeamCity的8.x的NTLM HTTP认证 ),你可以从/ntlmLogin.html URL会话cookie(TCSESSIONID),并用它来对REST进行身份验证API。
我刚刚做同样得到建立的固定状态的东西。 下面是我用PowerShell的:
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;
注:我不知道,如果这是正式JetBrains的支持,所以你可能会发现它打破了TeamCity的未来版本,但它目前是针对8.0.2版本(版本27482)。