45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package auth_test
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/lixenwraith/auth"
|
|
)
|
|
|
|
func ExampleNewCredential() {
|
|
credential, err := auth.NewCredential("alice", "a-long-example-password")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
// For this local example only. Services should persist a random decoy key
|
|
// and use NewScramServerWithDecoyKey, plus authenticated TLS for transport.
|
|
server := auth.NewScramServer()
|
|
defer server.Stop()
|
|
if err := server.AddCredential(credential); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
client := auth.NewScramClient("alice", "a-long-example-password")
|
|
first, err := client.StartAuthentication()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
challenge, err := server.ProcessClientFirstMessage(first.Username, first.ClientNonce)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
proof, err := client.ProcessServerFirstMessage(challenge)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
final, err := server.ProcessClientFinalMessage(proof.FullNonce, proof.ClientProof)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := client.VerifyServerFinalMessage(final); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Println(final.Username)
|
|
// Output: alice
|
|
}
|