简体   繁体   中英

Connecting to Atlassian JIRA from ASP.NET/C# via IIS on localhost

I am trying to create a small utility application wherein I need to login to JIRA (Atlassian.com).

Our JIRA server is hosted at Atlassian - example.atlassian.net and the application that I am trying to develop is hosted on my local server (192.168.1.XXX), on IIS. The application uses ASP.NET / C#.

I tried to run the sample JIRA example which presents a simple login page wherein the user is supposed to enter his/her JIRA credentials. Everything is fine up to this point.

If someone enters incorrect username/password, the application displays some error message (which I believe is broken):

The remote server returned an error: (401) Unauthorized.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Net.WebException: The remote server returned an error: (401) Unauthorized.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[WebException: The remote server returned an error: (401) Unauthorized.]
   System.Net.HttpWebRequest.GetResponse() +1743
   JiraExample.JiraManager.RunQuery(JiraResource resource, String argument, String data, String method) +597
   JiraExample.JiraManager.GetProjects() +100
   JiraExample.Login.Button1_Click(Object sender, EventArgs e) +143
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +11802193
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +150
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1735

But if correct username/password are entered, it says "This site cannot be reached" and points to firewall/proxy issues.

Is it because of lack of FQDN or because of the private IP address? If yes, is there a way to forward the JIRA response to my application?

Thanks

EDIT:

This example is using basic authentication:

    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
    request.ContentType = "application/json";
    request.Method = method;
    string base64Credentials = GetEncodedCredentials();
    request.Headers.Add("Authorization", "Basic " + base64Credentials);

    private string GetEncodedCredentials()
    {
       string mergedCredentials = string.Format("{0}:{1}", m_Username, m_Password);
       byte[] byteCredentials = UTF8Encoding.UTF8.GetBytes(mergedCredentials);
      return Convert.ToBase64String(byteCredentials);
   }

(above code listing is partial)

It's because of the private IP address. The sample you're using is built around OAuth, which involves a roundtrip of tokens. See this Jira OAuth article. To keep it simple, use basic authentication by base64-encoding your username:password and add it (with a prefix of "Basic") to the Authorization header.

var encodedAuth = System.Convert.ToBase64String(
    System.Text.Encoding.UTF8.GetBytes("username:password")
);
var Client = new HttpClient();
Client.DefaultRequestHeaders.Add("Authorization", "Basic " + encodedAuth);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM