client_ad_integration_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // +build adintegration
  2. // To turn on this test use -tags=integration in go test command
  3. package client
  4. import (
  5. "encoding/hex"
  6. "github.com/stretchr/testify/assert"
  7. "gopkg.in/jcmturner/gokrb5.v4/config"
  8. "gopkg.in/jcmturner/gokrb5.v4/iana/etypeID"
  9. "gopkg.in/jcmturner/gokrb5.v4/keytab"
  10. "gopkg.in/jcmturner/gokrb5.v4/testdata"
  11. "testing"
  12. )
  13. func TestClient_SuccessfulLogin_AD(t *testing.T) {
  14. b, err := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
  15. kt, _ := keytab.Parse(b)
  16. c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF)
  17. c.Realms[0].KDC = []string{testdata.TEST_KDC_AD}
  18. cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
  19. cl.WithConfig(c)
  20. err = cl.Login()
  21. if err != nil {
  22. t.Fatalf("Error on login: %v\n", err)
  23. }
  24. }
  25. func TestClient_GetServiceTicket_AD(t *testing.T) {
  26. b, err := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
  27. kt, _ := keytab.Parse(b)
  28. c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF)
  29. c.Realms[0].KDC = []string{testdata.TEST_KDC_AD}
  30. cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
  31. cl.WithConfig(c)
  32. err = cl.Login()
  33. if err != nil {
  34. t.Fatalf("Error on login: %v\n", err)
  35. }
  36. spn := "HTTP/host.test.gokrb5"
  37. tkt, key, err := cl.GetServiceTicket(spn)
  38. if err != nil {
  39. t.Fatalf("Error getting service ticket: %v\n", err)
  40. }
  41. assert.Equal(t, spn, tkt.SName.GetPrincipalNameString())
  42. assert.Equal(t, int32(18), key.KeyType)
  43. }
  44. func TestClient_SuccessfulLogin_AD_TRUST_USER_DOMAIN(t *testing.T) {
  45. b, err := hex.DecodeString(testdata.TESTUSER1_USERKRB5_AD_KEYTAB)
  46. kt, _ := keytab.Parse(b)
  47. c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF)
  48. c.Realms[0].KDC = []string{testdata.TEST_KDC_AD_TRUST_USER_DOMAIN}
  49. c.LibDefaults.DefaultRealm = "USER.GOKRB5"
  50. cl := NewClientWithKeytab("testuser1", "USER.GOKRB5", kt)
  51. cl.WithConfig(c)
  52. cl.GoKrb5Conf.DisablePAFXFast = true
  53. err = cl.Login()
  54. if err != nil {
  55. t.Fatalf("Error on login: %v\n", err)
  56. }
  57. }
  58. func TestClient_GetServiceTicket_AD_TRUST_USER_DOMAIN(t *testing.T) {
  59. b, _ := hex.DecodeString(testdata.TESTUSER1_USERKRB5_AD_KEYTAB)
  60. kt, _ := keytab.Parse(b)
  61. c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF)
  62. c.Realms[0].KDC = []string{testdata.TEST_KDC_AD_TRUST_USER_DOMAIN}
  63. c.LibDefaults.DefaultRealm = "USER.GOKRB5"
  64. c.LibDefaults.Canonicalize = true
  65. cl := NewClientWithKeytab("testuser1", "USER.GOKRB5", kt)
  66. c.LibDefaults.DefaultTktEnctypes = []string{"rc4-hmac"}
  67. c.LibDefaults.DefaultTktEnctypeIDs = []int32{etypeID.ETypesByName["rc4-hmac"]}
  68. c.LibDefaults.DefaultTGSEnctypes = []string{"rc4-hmac"}
  69. c.LibDefaults.DefaultTGSEnctypeIDs = []int32{etypeID.ETypesByName["rc4-hmac"]}
  70. cl.WithConfig(c)
  71. cl.GoKrb5Conf.DisablePAFXFast = true
  72. err := cl.Login()
  73. if err != nil {
  74. t.Fatalf("Error on login: %v\n", err)
  75. }
  76. spn := "HTTP/host.res.gokrb5"
  77. tkt, key, err := cl.GetServiceTicket(spn)
  78. if err != nil {
  79. t.Fatalf("Error getting service ticket: %v\n", err)
  80. }
  81. assert.Equal(t, spn, tkt.SName.GetPrincipalNameString())
  82. assert.Equal(t, etypeID.ETypesByName["rc4-hmac"], key.KeyType)
  83. b, _ = hex.DecodeString(testdata.SYSHTTP_RESGOKRB5_AD_KEYTAB)
  84. skt, _ := keytab.Parse(b)
  85. err = tkt.DecryptEncPart(skt, "sysHTTP")
  86. if err != nil {
  87. t.Errorf("Error decrypting ticket with service keytab: %v", err)
  88. }
  89. isPAC, pac, err := tkt.GetPACType(skt, "sysHTTP")
  90. if err != nil {
  91. t.Errorf("Error getting PAC: %v", err)
  92. }
  93. assert.True(t, isPAC, "Did not find PAC in service ticket")
  94. assert.Equal(t, "testuser1", pac.KerbValidationInfo.EffectiveName.Value, "PAC value not parsed")
  95. }