1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
// +build examples
package main
import (
"encoding/hex"
"fmt"
"io/ioutil"
"net/http"
"os"
//"github.com/pkg/profile"
"gopkg.in/jcmturner/gokrb5.v5/client"
"gopkg.in/jcmturner/gokrb5.v5/config"
"gopkg.in/jcmturner/gokrb5.v5/keytab"
"gopkg.in/jcmturner/gokrb5.v5/testdata"
)
const (
port = ":9080"
kRB5CONF = `[libdefaults]
default_realm = TEST.GOKRB5
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
default_tkt_enctypes = aes256-cts-hmac-sha1-96
default_tgs_enctypes = aes256-cts-hmac-sha1-96
[realms]
TEST.GOKRB5 = {
kdc = 127.0.0.1:88
admin_server = 127.0.0.1:749
default_domain = test.gokrb5
}
[domain_realm]
.test.gokrb5 = TEST.GOKRB5
test.gokrb5 = TEST.GOKRB5
`
)
func main() {
//defer profile.Start(profile.TraceProfile).Stop()
// Load the keytab
kb, _ := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
kt, err := keytab.Parse(kb)
if err != nil {
panic(err)
}
// Create the client with the keytab
cl := client.NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
// Load the client krb5 config
conf, err := config.NewConfigFromString(kRB5CONF)
if err != nil {
panic(err)
}
addr := os.Getenv("TEST_KDC_ADDR")
if addr != "" {
conf.Realms[0].KDC = []string{addr + ":88"}
}
// Apply the config to the client
cl.WithConfig(conf)
// Log in the client
err = cl.Login()
if err != nil {
panic(err)
}
// Form the request
url := "http://localhost" + port
r, err := http.NewRequest("GET", url, nil)
if err != nil {
panic(err)
}
// Apply the client's auth headers to the request
err = cl.SetSPNEGOHeader(r, "HTTP/host.test.gokrb5")
if err != nil {
panic(err)
}
// Make the request
resp, err := http.DefaultClient.Do(r)
if err != nil {
panic(err)
}
b, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(b))
}
|