2012-06-13 11 views
5

में क्रेडेंशियल पास किए बिना आरईएसटी एपीआई का उपयोग कर टीमसिटी सर्वर पर लॉग ऑन करें पिछले प्रश्न के अनुवर्ती के रूप में मैंने पूछा: How to pass username and password in TeamCity REST API, मैं कुछ जांचना चाहता हूं।यूआरएल

क्या कोई मुझे बता सकता है कि टीमसिटी रीस्ट एपीआई को अधिक सुरक्षित तरीके से एक्सेस करना संभव है, फिर यूआरएल में उपयोगकर्ता नाम और पासवर्ड पास करना संभव है?

यह सिर्फ मुझे लगता है कि यूआरएल में प्रमाण पत्र पारित करना एकमात्र तरीका है, क्योंकि एक स्नफ़फर के लिए यूआरएल पर हाथ पकड़ना और प्रमाण-पत्रों का उपयोग करना इतना आसान है।

उत्तर

2

मैंने इसके साथ कुछ और खुदाई की है और यह बहुत ही आशाजनक नहीं लग रहा है।

मैं TeamCity समुदाय मंच पर निम्नलिखित धागा मिला:

बाकी API प्रमाणीकरण एकीकृत

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

अन्य उपयोगकर्ता एक समान प्रश्न पूछा था मेरी करने के लिए और प्रतिक्रिया है कि था बुनियादी HTTP प्रमाणीकरण वर्तमान में एकमात्र विकल्प है। यद्यपि आप एनटीएलएम प्रमाणीकरण का उपयोग कर सकते हैं, जो फ्रंट एंड वेब यूआई की तरफ तैयार है, न कि आरईएसटी एपीआई।

मैंने मंच पर पूछा है कि आरईएसटी एपीआई के माध्यम से एनटीएलएम का उपयोग करना संभव है या नहीं। मेरे पास कोई जवाब नहीं है, लेकिन मैं कल्पना कर सकता हूं कि यह संभव नहीं है, इस मामले में उम्मीद की जाएगी।

8

हम एक ही समस्या का सामना करना पड़ा है और मैं कुछ समय बिताया है कि हम कैसे इस समस्या को हल कर सकता है देखने के लिए और एक रास्ता मिल गया:

आप प्रारंभिक स्क्रीन (/ntlmLogin.html) में एक मिलता है - आप हो जाएगा एनटीएलएम का उपयोग कर उपयोगकर्ता की पहचान करने में सक्षम।
फिर आप उस कुकी को सहेजते हैं जो टीमसिटी आपको प्रदान करता है।
अब आप एपीआई तक पहुंचने के लिए कुकी का उपयोग करते हैं।

https://github.com/eduaquiles/TeamCityNtlmApiWrapper देखें कि यह कैसे करें इस पर एक बहुत ही सरल उदाहरण है।

+0

आप उन्हें ताजा कैसे रखते हैं? – abourget

+0

हम कुकी को ताज़ा कैसे रखते हैं? हम टीसी के साथ कोई दीर्घकालिक कनेक्शन नहीं कर रहे थे, इसलिए हमें इस बिंदु पर कभी नहीं मिला कि कुकी अब मान्य नहीं है। लेकिन अगर हमें करना पड़ा, तो हमें एक चेक करना होगा, और 401 के मामले में, हम फिर से प्रमाण पत्र भेजेंगे। बीटीडब्ल्यू, मैं टीमसिटी के साथ 2 साल से काम नहीं कर रहा हूं, इसलिए मुझे नहीं पता कि समाधान अभी भी लागू होता है या नहीं। –

2

एडुआर्डो Aquiles के अनुसार, यदि आप HTTP NTLM प्रमाणीकरण (TeamCity 8.x NTLM HTTP Authentication) का समर्थन करने के लिए अपने TeamCity सर्वर को, आप /ntlmLogin.html यूआरएल से एक सत्र कुकी (TCSESSIONID) मिलता है और का उपयोग करें कि बाकी एपीआई के खिलाफ प्रमाणित करने के लिए कर सकते हैं।

मुझे बस निर्माण की पिन की स्थिति प्राप्त करने के समान कुछ करना पड़ा है।

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; 

नोट:: यहाँ PowerShell मैं प्रयोग किया जाता है मुझे यकीन है कि अगर यह आधिकारिक तौर पर जेटब्रेन्स द्वारा समर्थित है नहीं कर रहा हूँ, तो आपको पता चल सकता है कि यह TeamCity के भविष्य के संस्करण में टूट जाता है, लेकिन यह अभी संस्करण 8.0.2 के खिलाफ काम करता है (27482 का निर्माण)।

+0

आपके उत्तर के लिए धन्यवाद।दुर्भाग्यवश, अब मैं उस कंपनी के लिए काम नहीं करता जिसने पर्यावरण में टीमसिटी का उपयोग किया, इसलिए मैं आपके सुझाव का प्रयास कर सकता हूं। हालांकि, मैं आपके इनपुट की सराहना करता हूं :) –