2017-01-09 5 views
2

Ich bin neu in Golang.Golang HTTP Basic Auth

Ich versuche JIRA Rest api mit grundlegenden auth zu nennen, aber Fehler folgende bekommen

&{401 Unauthorized 401 HTTP/2.0 2 0 
map[X-Content-Type-Options:[nosniff] 
Set-Cookie:[JSESSIONID=E08620; Path=/; 
Secure; HttpOnly studio.crowd.tokenkey=""; 
Domain=.test.atlassian.net; Expires=Thu, 01-Jan-1970 00:00:10 
GMT; Path=/; Secure; HttpOnly studio.crowd.tokenkey=""; 
Domain=.test.atlassian.net; Expires=Thu, 01-Jan-1970 00:00:10 
GMT; Path=/; Secure; HttpOnly] Server:[nginx] Date:[Mon, 09 Jan 2017 
05:18:29 GMT] Content-Type:[text/html;charset=UTF-8] 
X-Arequestid:[648x20759x1] X-Seraph-Loginreason:[AUTHENTICATED_FAILED] 
Www-Authenticate:[OAuth 
realm="https%3A%2F%2Ftest.atlassian.net"]] {0xc42039b900} -1 [] 
false false map[] 0xc4200ce0f0 0xc4202b0420} 

Mein Code ist

package main 

import (
    "fmt" 
    "log" 
    "net/http" 
) 

const (
    USERNAME = "" 
    PASSWORD = "" 
    URL  = "https://test.atlassian.net/rest/api/2/issue/SLUB-7194" 
) 

func main() { 
    req, err := http.NewRequest("GET", URL, nil) 
    req.SetBasicAuth(USERNAME, PASSWORD) 

    req.Header.Set("Accept", "application/json") 
    req.Header.Set("Content-Type", "application/json") 

    cli := &http.Client{} 
    resp, err := cli.Do(req) 

    if err != nil { 
     log.Fatal(err) 
    } 

    fmt.Println(resp); 
} 

ich etwas falsch tue?

Vielen Dank im Voraus

+0

Ich habe seltsame Probleme bei der Verbindung mit Jira API getroffen. Manchmal müssen Sie API-Verbindungen explizit zulassen. Manchmal muss man einen OpenAPI-Tanz machen, um einen Berechtigungsnachweis zu erhalten. Nicht alle Pakete funktionieren gut damit. So empfehle ich, sicher Problem nicht in API selbst, z. mit CURL oder einem anderen handlichen HTTP-Debugging-Tool wie 'httpie'. –

Antwort

4

Wie in Netflix-Skunkworks/go-jira/cli.go gesehen, müssen Sie sich einloggen, dann jira Ticket anfordern.

func (c *Cli) makeRequest(req *http.Request) (resp *http.Response, err error) { 
    req.Header.Set("Accept", "application/json") 
    req.Header.Set("Content-Type", "application/json") 

    if source, ok := c.opts["password-source"]; ok && !strings.HasSuffix(req.URL.Path, "/rest/auth/1/session") { 
     user, _ := c.opts["user"].(string) 
     password := c.GetPass(user) 
     if password == "" { 
      log.Warning("No password for user %s in %s, please run the 'login' command first", user, source) 
     } else { 
      req.SetBasicAuth(user, password) 
     } 
}