|
|
9 лет назад | |
|---|---|---|
| GSSAPI | 9 лет назад | |
| asn1tools | 9 лет назад | |
| client | 9 лет назад | |
| config | 9 лет назад | |
| credentials | 9 лет назад | |
| crypto | 9 лет назад | |
| iana | 9 лет назад | |
| keytab | 9 лет назад | |
| messages | 9 лет назад | |
| testdata | 9 лет назад | |
| testenv | 9 лет назад | |
| types | 9 лет назад | |
| .gitignore | 9 лет назад | |
| LICENSE | 9 лет назад | |
| README.md | 9 лет назад | |
| debug.go | 9 лет назад |
This is work in progress and does not yet fully work...
The currently implemented encrytion types are:
| Implementation | Encryption ID | Checksum ID |
|---|---|---|
| aes128-cts-hmac-sha1-96 | 17 | 15 |
| aes256-cts-hmac-sha1-96 | 18 | 16 |
The gokrb5 libraries use the same krb5.conf configuration file format as MIT Kerberos, described here. Config instances can be created by loading from a file path or by passing a string, io.Reader or bufio.Scanner to the relevant method:
import "github.com/jcmturner/gokrb5/config"
cfg, err := config.Load("/path/to/config/file")
cfg, err := config.NewConfigFromString(krb5Str) //String must have appropriate newline separations
cfg, err := config.NewConfigFromReader(reader)
cfg, err := config.NewConfigFromScanner(scanner)
Standard keytab files can be read from a file or from a slice of bytes:
import "github.com/jcmturner/gokrb5/keytab"
ktFromFile, err := keytab.Load("/path/to/file.keytab")
ktFromBytes, err := keytab.Parse(b)
Create a client instance with either a password or a keytab:
import "github.com/jcmturner/gokrb5/client"
cl := client.NewClientWithPassword("username", "REALM.COM", "password")
cl := client.NewClientWithKeytab("username", "REALM.COM", kt)
Provide configuration to the client:
cl.WithConfig(cfg)
Login:
err := cl.Login
(Optional) Enable automatic refresh of Kerberos Ticket Granting Ticket (TGT):
cl.EnableAutoSessionRenewal()
Request a Serivce ticket for a Service Principal Name (SPN). This method will use the client's cache either returning a valid cached ticket, renewing a cached ticket with the KDC or requesting a new ticket from the KDC. Therefore the GetServiceTicket method can be continually used for the most efficient interaction with the KDC.
tkt, err := cl.GetServiceTicket("HTTP/host.test.gokrb5")
| Issue | Worked around? | References |
|---|---|---|
| Golang's ASN1 package cannot unmarshal into slice of asn1.RawValue | Yes | https://github.com/golang/go/issues/17321 |
| Golang's ASN1 package cannot marshal into a GeneralString | Yes - using https://github.com/jcmturner/asn1 | https://github.com/golang/go/issues/18832 |
| Golang's ASN1 package cannot marshal into slice of strings and pass stringtype parameter tags to members | Yes - using https://github.com/jcmturner/asn1 | https://github.com/golang/go/issues/18834 |
| Golang's ASN1 package cannot marshal with application tags | Yes |