Как авторизовать или удалить контекст безопасности JAAS с помощью собственных библиотек (SSPI или MIT или Heimdal) - PullRequest
0 голосов
/ 08 июня 2019

Мне нужно выполнить авторизацию или делегирование прав в Active Directory по цепочке JAAS (Java) -> Собственное приложение с ODBC (C ++) -> MS SQL Server.Подойдет любой вариант:

  1. проверить, является ли пользователь действительным, и выяснить, кто он;
  2. делегировать права пользователей и получить доступ к MSDB через ODBC.

Изначально я получаю билет, созданный с помощью этого кода:

Oid KERB_V5_OID             = new Oid("1.2.840.113554.1.2.2");
Oid KRB5_PRINCIPAL_NAME_OID = new Oid("1.2.840.113554.1.2.2.1");

KerberosPrincipal kerberosPrincipal;

GSSManager    gssManager    = GSSManager.getInstance();
String        remoteSpnName = this.url + "@" + kerberosPrincipal.getRealm();
String        localSpnName  = kerberosPrincipal.getName();
GSSName       remoteGssName = gssManager.createName      (remoteSpnName, KRB5_PRINCIPAL_NAME_OID);
GSSName       localGssName  = gssManager.createName      (localSpnName,  KRB5_PRINCIPAL_NAME_OID);
GSSCredential localCreds    = gssManager.createCredential(localGssName, 0, KERB_V5_OID, 1);
GSSContext    gssContext    = gssManager.createContext   (remoteGssName, KERB_V5_OID, localCreds, 0);

gssContext.requestMutualAuth(false);
gssContext.requestConf(false);
gssContext.requestInteg(false);

byte[] ticket = gssContext.initSecContext(new byte[0], 0, 0);

Похоже, мне следует использовать SSPI, потому что я работаю на платформе MS, но мне не удалось принять билет.Похоже, что SSPI и JAAS используют разные форматы.

Также я попробовал библиотеку MIT из-за ее открытого характера, поэтому я всегда могу заглянуть внутрь ее кода.Принятие заявки с gss_accept_security_context дает мне «неизвестную ошибку FF 161».

Мне кажется, что я выполняю неправильную последовательность вызовов, пытаясь ее принять.

Вся помощь приветствуется.Спасибо.

...