2012-06-13 17 views
5

に資格情報を渡すことなく、RESTのAPIを使用して:How to pass username and password in TeamCity REST API、私は何かを確認したいと思います。それは、より安全な方法でチームシティーREST APIにアクセスすることが可能です場合ログ私は尋ね前の質問へのフォローアップとしてURL

誰かがURLにユーザー名とパスワードを渡すというし、教えてもらえますか?

ちょうどスニファは、URLを手にし、資格情報自体を使用することはとても簡単ですので、URLに資格情報を渡すと、唯一の方法であることを私に狂ったようです。

答えて

2

これでもう少し詳しく調べてみましたが、あまり有望ではありません。

私はチームシティーのコミュニティフォーラムに次のスレッドが見つかりました:統合

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

別のユーザーが採掘するために同様の質問をしていたし、応答がその基本的なHTTPた

休憩API認証現在、認証は唯一のオプションです。 NTLM認証を使用することはできますが、これはREST APIではなく、フロントエンドのWeb UIに合わせて調整されています。

私はREST API経由でNTLMを使用することが可能であるかどうかをフォーラムに尋ねてきました。私は返事がありませんでしたが、私はそれが不可能であると想像することができます、これはこの場合予想されるでしょう。

8

我々は同じ問題に直面し、私はどのように我々はこの問題を解決する可能性が見るためにいくつかの時間を費やしたと方法を見つけた:

あなたが最初の画面(/ntlmLogin.html)で入手できますか - あなたはなるだろうがNTLMを使用してユーザーを識別することができます。
次に、TeamCityが提供するCookieを保存します。
これでCookieを使用してAPIにアクセスしました。

はこれを行う方法の非常に簡単な例でhttps://github.com/eduaquiles/TeamCityNtlmApiWrapperを参照してください。

+0

どのように新鮮な状態に保ちますか? – abourget

+0

クッキーを新鮮に保つにはどうすればいいですか? TCとの長期的な接続は行っていませんでしたので、Cookieがもう有効ではないという点に決して納得できませんでした。 しかし、しなければならないのは、小切手をする必要があり、401の場合には、もう一度資格情報を送るということです。 私はTeamCityで2年間働いていないので、解決策がまだ適用されるかどうかはわかりません。 –

2

Eduardo Aquilesによれば、HTTP NTLM認証(TeamCity 8.x NTLM HTTP Authentication)をサポートするようにTeamCityサーバーを構成すると、/ntlmLogin.html URLからセッションCookie(TCSESSIONID)を取得し、これを使用してREST APIに対して認証することができます。

私はちょうどビルドの固定状態を得るために似たようなことをしなければなりませんでした。

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; 

注:これは正式にジェットブレーンズによってサポートされている場合、あなたはそれがチームシティーの将来のバージョンで壊れるかもしれませんので、私は、わからないんだけど、それは現在のバージョン8.0.2に対して動作しますここで私が使用PowerShellがあります(ビルド27482)。

+0

あなたの答えをありがとう。残念ながら、環境でTeamCityを使用していた会社ではもう働きません。私はあなたの提案を試すことができます。しかし、私はあなたの入力を感謝します:) –

関連する問題