2012-06-13 24 views
5

Làm theo một câu hỏi trước tôi đã hỏi: How to pass username and password in TeamCity REST API, tôi muốn kiểm tra điều gì đó.Đăng nhập vào máy chủ TeamCity bằng REST API mà không cần thông qua bằng chứng xác thực trong url

Ai đó có thể cho tôi biết nếu có thể truy cập API REST TeamCity theo cách an toàn hơn, thay vì chuyển tên người dùng và mật khẩu vào url?

Điều đó có vẻ điên rồ đối với tôi rằng thông tin đăng nhập trong url là cách duy nhất, vì rất dễ dàng cho một người chơi sniffer có được bàn tay của họ trên url và sử dụng thông tin đăng nhập.

Trả lời

2

Tôi đã thực hiện thêm một số thao tác xung quanh với điều này và có vẻ không quá hứa hẹn.

Tôi tìm thấy thread sau trên các diễn đàn cộng đồng TeamCity:

Rest API Xác thực tích hợp

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

Một người dùng khác đã hỏi một câu hỏi tương tự để khai thác và đáp ứng là HTTP cơ bản xác thực hiện là tùy chọn duy nhất. Mặc dù bạn có thể sử dụng xác thực NTLM, nhưng được điều chỉnh theo giao diện người dùng web phía trước chứ không phải API REST.

Tôi đã hỏi trên diễn đàn liệu việc sử dụng NTLM thông qua API REST là có thể. Tôi đã không có một câu trả lời, nhưng tôi có thể tưởng tượng rằng nó không thể, mà sẽ được dự kiến ​​trong trường hợp này.

8

Chúng tôi phải đối mặt với cùng một vấn đề và tôi đã dành một thời gian để xem làm thế nào chúng ta có thể giải quyết vấn đề này và tìm ra cách:

Bạn làm một get trong màn hình ban đầu (/ntlmLogin.html) - bạn sẽ có có thể xác định người dùng bằng NTLM.
Sau đó, bạn lưu cookie mà TeamCity cung cấp cho bạn.
Bây giờ bạn sử dụng cookie để truy cập API.

Xem https://github.com/eduaquiles/TeamCityNtlmApiWrapper với một ví dụ rất đơn giản về cách thực hiện việc này.

+0

Làm cách nào để giữ cho chúng luôn mới mẻ? – abourget

+0

Làm cách nào để giữ cho cookie luôn tươi mới? Chúng tôi không thực hiện bất kỳ kết nối dài hạn nào với TC, vì vậy chúng tôi chưa bao giờ đến mức cookie không còn hợp lệ nữa. Nhưng nếu chúng tôi phải làm vậy, chúng tôi sẽ cần kiểm tra và trong trường hợp 401, chúng tôi sẽ gửi lại thông tin đăng nhập. BTW, tôi không làm việc với TeamCity trong 2 năm nay, vì vậy tôi không biết liệu giải pháp đó vẫn áp dụng hay không. –

2

Theo Eduardo Aquiles, nếu bạn định cấu hình máy chủ TeamCity của mình để hỗ trợ xác thực HTTP NTLM (TeamCity 8.x NTLM HTTP Authentication), bạn có thể nhận cookie phiên (TCSESSIONID) từ url /ntlmLogin.html và sử dụng để xác thực đối với API REST.

Tôi vừa phải làm điều gì đó tương tự để nhận trạng thái được gắn của các bản dựng. Đây là PowerShell tôi đã sử dụng:

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; 

Lưu ý: Tôi không chắc chắn nếu điều này được hỗ trợ chính thức bởi JetBrains, vì vậy bạn có thể tìm thấy nó phá vỡ trong một phiên bản tương lai của TeamCity, nhưng nó hiện đang làm việc với phiên bản 8.0.2 (xây dựng 27482).

+0

Cảm ơn câu trả lời của bạn.Thật không may, tôi không còn làm việc cho công ty đã sử dụng TeamCity trong môi trường, vì vậy tôi có thể thử đề xuất của bạn. Tuy nhiên, tôi đánh giá cao đầu vào của bạn :) –

Các vấn đề liên quan