簡體   English   中英

C#使用REST API對Jira進行憑據驗證

[英]C# Credential validation against Jira using the REST API

我正在使用C#Windows窗體應用程序,我希望能夠針對Jira測試用戶的憑據。 基本上用戶會輸入他們的用戶名和密碼,單擊確定,程序將告訴他們是否接受他們的憑據。

我已經有了工作代碼(見下文),它通過HttpWebRequest使用基本身份驗證來創建新票證(也就是問題),關閉票證,添加觀察者等等 - 所以我認為這很容易,但我正在努力解決它。

作為模擬,您可以使用System.DirectoryServices.AccountManagement命名空間非常輕松地對Active Directory執行憑據檢查。 基本上, authenticateAD()方法只返回true或false:

private bool authenticateAD(string username, string password)
{
    PrincipalContext pc = new PrincipalContext(ContextType.Domain, "example.com");
    bool isValid = pc.ValidateCredentials(username,password);
    return isValid;
}

這正是我想用Jira做的事情。

作為參考,這里是我用來在jira中添加/關閉/更新票證的代碼 - 也許可以修改它來做我想要的?

private Dictionary<string, string> sendHTTPtoREST(string json, string restURL)
{
    HttpWebRequest request = WebRequest.Create(restURL) as HttpWebRequest;
    request.Method = "POST";
    request.Accept = "application/json";
    request.ContentType = "application/json";
    string mergedCreds = string.Format("{0}:{1}", username, password);
    byte[] byteCreds = UTF8Encoding.UTF8.GetBytes(mergedCreds);
    request.Headers.Add("Authorization", "Basic " + byteCreds);
    byte[] data = Encoding.UTF8.GetBytes(json);
    try
    {
        using (var requestStream = request.GetRequestStream())
        {
            requestStream.Write(data, 0, data.Length);
            requestStream.Close();
        }
    }
    catch(Exception ex)
    {
        displayMessages(string.Format("Error creating Jira: {0}",ex.Message.ToString()), "red", "white");
        Dictionary<string, string> excepHTTP = new Dictionary<string, string>();
        excepHTTP.Add("error", ex.Message.ToString());
        return excepHTTP;
    }
    response = (HttpWebResponse)request.GetResponse();
    var reader = new StreamReader(response.GetResponseStream());
    string str = reader.ReadToEnd();
    var jss = new System.Web.Script.Serialization.JavaScriptSerializer();
    var sData = jss.Deserialize<Dictionary<string, string>>(str);

    if(response.StatusCode.ToString()=="NoContent")
    {
        sData.Add("code", "NoContent");
        request.Abort();
        return sData;
    }
    else
    {
        sData.Add("code", response.StatusCode.ToString());
        request.Abort();
        return sData;
    }
}

謝謝!

如何嘗試訪問JIRA的根頁並查看是否收到HTTP 403錯誤?

        try
        {
            // access JIRA using (parts of) your existing code
        }
        catch (WebException we)
        {
            var response = we.Response as HttpWebResponse;
            if (response != null && response.StatusCode == HttpStatusCode.Forbidden)
            {
                // JIRA doesn't like your credentials
            }
        }

HttpClient很簡單,最好使用GetAsync檢查憑據。

示例代碼如下

using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(JiraPath);
                // Add an Accept header for JSON format.
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string mergedCreds = string.Format("{0}:{1}", username, password);
byte[] byteCreds = UTF8Encoding.UTF8.GetBytes(mergedCreds);
                var authHeader = new AuthenticationHeaderValue("Basic", byteCreds);
                client.DefaultRequestHeaders.Authorization = authHeader;
                HttpResponseMessage response = client.GetAsync(restURL).Result;  // Blocking call!
                if (response.IsSuccessStatusCode)
                {
                    strJSON = response.Content.ReadAsStringAsync().Result;
                    if (!string.IsNullOrEmpty(strJSON))
                        return strJSON;
                }
                else
                {
                    exceptionOccured = true;
                    // Use "response.ReasonPhrase" to return error message

                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM