Мне нужно выполнить авторизацию или делегирование прав в Active Directory по цепочке JAAS (Java) -> Собственное приложение с ODBC (C ++) -> MS SQL Server.Подойдет любой вариант:
- проверить, является ли пользователь действительным, и выяснить, кто он;
- делегировать права пользователей и получить доступ к 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».
Мне кажется, что я выполняю неправильную последовательность вызовов, пытаясь ее принять.
Вся помощь приветствуется.Спасибо.