| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // +build examples
- package main
- import (
- "encoding/hex"
- "fmt"
- "log"
- "net/http"
- "os"
- goidentity "gopkg.in/jcmturner/goidentity.v3"
- "gopkg.in/jcmturner/gokrb5.v7/keytab"
- "gopkg.in/jcmturner/gokrb5.v7/service"
- "gopkg.in/jcmturner/gokrb5.v7/spnego"
- "gopkg.in/jcmturner/gokrb5.v7/test/testdata"
- )
- const (
- port = ":9080"
- )
- func main() {
- //defer profile.Start(profile.TraceProfile).Stop()
- // Create logger
- l := log.New(os.Stderr, "GOKRB5 Service: ", log.Ldate|log.Ltime|log.Lshortfile)
- // Load the service's keytab
- b, _ := hex.DecodeString(testdata.HTTP_KEYTAB)
- kt := keytab.New()
- kt.Unmarshal(b)
- // Create the application's specific handler
- th := http.HandlerFunc(testAppHandler)
- // Set up handler mappings wrapping in the SPNEGOKRB5Authenticate handler wrapper
- mux := http.NewServeMux()
- mux.Handle("/", spnego.SPNEGOKRB5Authenticate(th, kt, service.Logger(l)))
- // Start up the web server
- log.Fatal(http.ListenAndServe(port, mux))
- }
- // Simple application specific handler
- func testAppHandler(w http.ResponseWriter, r *http.Request) {
- w.WriteHeader(http.StatusOK)
- ctx := r.Context()
- creds := ctx.Value(spnego.CTXKeyCredentials).(goidentity.Identity)
- fmt.Fprintf(w,
- `<html>
- <h1>GOKRB5 Handler</h1>
- <ul>
- <li>Authenticed user: %s</li>
- <li>User's realm: %s</li>
- <li>Authn time: %v</li>
- <li>Session ID: %s</li>
- <ul>
- </html>`,
- creds.UserName(),
- creds.Domain(),
- creds.AuthTime(),
- creds.SessionID(),
- )
- return
- }
|