httpClient.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // +build examples
  2. package main
  3. import (
  4. "encoding/hex"
  5. "fmt"
  6. "io/ioutil"
  7. "log"
  8. "net/http"
  9. "os"
  10. "gopkg.in/jcmturner/gokrb5.v7/client"
  11. "gopkg.in/jcmturner/gokrb5.v7/config"
  12. "gopkg.in/jcmturner/gokrb5.v7/keytab"
  13. "gopkg.in/jcmturner/gokrb5.v7/spnego"
  14. "gopkg.in/jcmturner/gokrb5.v7/test/testdata"
  15. )
  16. const (
  17. port = ":9080"
  18. kRB5CONF = `[libdefaults]
  19. default_realm = TEST.GOKRB5
  20. dns_lookup_realm = false
  21. dns_lookup_kdc = false
  22. ticket_lifetime = 24h
  23. forwardable = yes
  24. default_tkt_enctypes = aes256-cts-hmac-sha1-96
  25. default_tgs_enctypes = aes256-cts-hmac-sha1-96
  26. [realms]
  27. TEST.GOKRB5 = {
  28. kdc = 127.0.0.1:88
  29. admin_server = 127.0.0.1:749
  30. default_domain = test.gokrb5
  31. }
  32. [domain_realm]
  33. .test.gokrb5 = TEST.GOKRB5
  34. test.gokrb5 = TEST.GOKRB5
  35. `
  36. )
  37. func main() {
  38. l := log.New(os.Stderr, "GOKRB5 Client: ", log.LstdFlags)
  39. //defer profile.Start(profile.TraceProfile).Stop()
  40. // Load the keytab
  41. kb, _ := hex.DecodeString(testdata.TESTUSER2_KEYTAB)
  42. kt := keytab.New()
  43. err := kt.Unmarshal(kb)
  44. if err != nil {
  45. l.Fatalf("could not load client keytab: %v", err)
  46. }
  47. // Load the client krb5 config
  48. conf, err := config.NewConfigFromString(kRB5CONF)
  49. if err != nil {
  50. l.Fatalf("could not load krb5.conf: %v", err)
  51. }
  52. addr := os.Getenv("TEST_KDC_ADDR")
  53. if addr != "" {
  54. conf.Realms[0].KDC = []string{addr + ":88"}
  55. }
  56. // Create the client with the keytab
  57. cl := client.NewClientWithKeytab("testuser2", "TEST.GOKRB5", kt, conf, client.Logger(l), client.DisablePAFXFAST(true))
  58. // Log in the client
  59. err = cl.Login()
  60. if err != nil {
  61. l.Fatalf("could not login client: %v", err)
  62. }
  63. // Form the request
  64. url := "http://localhost" + port
  65. r, err := http.NewRequest("GET", url, nil)
  66. if err != nil {
  67. l.Fatalf("could create request: %v", err)
  68. }
  69. spnegoCl := spnego.NewClient(cl, nil, "HTTP/host.test.gokrb5")
  70. // Make the request
  71. resp, err := spnegoCl.Do(r)
  72. if err != nil {
  73. l.Fatalf("error making request: %v", err)
  74. }
  75. b, err := ioutil.ReadAll(resp.Body)
  76. if err != nil {
  77. l.Fatalf("error reading response body: %v", err)
  78. }
  79. fmt.Println(string(b))
  80. }