使用C#登录JIRA

时间:2018-01-24 20:55:06

标签: c# curl jira

我们的JIRA实例中的用户许可证有限,远远小于公司员工的数量。但我们希望所有员工都能够查看我们的JIRA仪表板(即查看项目,查看问题等)。我已经阅读了一些解决方法,我们可以在JIRA中创建一个只读访问帐户,然后创建另一个可以验证员工身份的登录表单。一旦员工提供了要进行身份验证的正确凭据,程序就会将秘密只读帐户提交给Atlassian。

我可以连接到CURL(状态:200),但我希望能将我重定向到使用只读帐户登录的JIRA仪表板。

这是我的卷曲命令:

curl -v -u "<emailaddress>:<api_token>" -H "Accept: application/json" -H "Content-Type: application/json" --cookie "cookies.cook" --cookie-jar "cookies.cook" -d "{\"username\": \"<emailaddress>\",\"password\": \"<password>\"}" -X POST "https://<company>.atlassian.net/rest/auth/1/session"

运行上面的curl将使用来自atlassian和cloud的标记修改cookies.cook。如果我手动将cookie令牌中的云令牌插入https://id.atlassian.com/login?continue=https%3A//<company>.atlassian.net,它会将我登录。(即谷歌浏览器(F12)&gt;控制台&gt; document.cookie=<cloudTokenName>=<cloudTokenValue>

这是我的C#代码:

Uri url = new Uri("https://<company>.atlassian.net/secure/Dashboard.jspa");
//Authenticate the user
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "<companydomain>"))
        {
            if (pc.ValidateCredentials(txtAdUser, txtAdPass))
            {
                var webRequest = (HttpWebRequest)WebRequest.Create(url);
                CookieContainer cookieJar = new CookieContainer();
                cookieJar.Add(cookie);
                webRequest.CookieContainer = cookieJar;
                webRequest.Method = "POST";
                webRequest.ContentType = "application/json";
                webRequest.Accept = "application/json";
                var authcred = Convert.ToBase64String(Encoding.Default.GetBytes("<emailaddress>:<api_token>"));
                webRequest.Headers.Add("Authorization", "Basic " + authcred);
                webRequest.Headers.Add(HttpRequestHeader.Cookie, cookieHeader);

                var data = "{\"username\":\"<emailaddress>\",\"password\":\"<password>\"}";
                byte[] bytes = Encoding.Default.GetBytes(data);
                webRequest.ContentLength = bytes.Length;

                Stream sw = webRequest.GetRequestStream();
                sw.Write(bytes, 0, bytes.Length);
                sw.Flush();
                sw.Close();
                Response.RedirecT(ourjirainstance);
            }
        }

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我没有C#专家,但我已经使用JIRA多年了,是的,这是可能的并且绝对合法,您只需要在收到之后将相应的标题传递给您的下一个请求来自卷曲的回应。

根据JIRA:他们的登录API,curl --request POST \ --user email@example.com:<api_token> \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --cookie cookie.txt --cookie-jar cookie.txt --data ' { "username": "fred", "password": "freds_password" }' \ --url 'https://your-domain.atlassian.net/rest/auth/1/session'

您的卷曲请求应为POST https://your-domain.atlassian.net/rest/auth/1/session

SELECT *
FROM `fp-conversion-data`
LIMIT 5;

请参阅:https://developer.atlassian.com/cloud/jira/platform/rest/#api-auth-1-session-post

收到令牌后,打开浏览器(Mozilla),转到JIRA登录页面,按F12进入网络,通过添加从curl收到的令牌编辑标题并重新发送请求。如果成功,将显示状态为200的重定向。转到重定向的URL(不是原始URL),您应该登录。祝您好运!

答案 1 :(得分:0)

如果您正考虑将Cookie从您的域名发送到另一个域名;我担心,我不认为这是可能的。与您尝试的方法相比,论坛中提供的解决方法可能是一种不同的方法。你应该问Atlassian。