GSSAPI получить пароль пользователя и создать учетные данные не работает для не вошедшего в систему пользователя

Я разрабатываю клиент C ++, который использует GSSAPI для входа на сервер. Для учетных данных я использую методы gss для создания объекта учетных данных (объяснено в коде ниже). Мой код для этой части

#include <gssapi.h>
#include <gssapi_krb5.h>
#include <gssapi/gssapi_generic.h>
#include <gssapi/gssapi_ext.h>

gss_cred_id_t method_to_get_cred(){

char *username = "[email protected]";
char *password = "correctpassword";
gss_buffer_desc send_tok;
OM_uint32 maj_stat, min_stat;
gss_cred_id_t cred;
gss_name_t gss_username;
gss_OID_set_desc mechs, *mechsp = GSS_C_NO_OID_SET;
gss_buffer_desc pwbuf;

send_tok.value = username;
send_tok.length = strlen(username);

maj_stat = gss_import_name(&min_stat, &send_tok,(
gss_OID) gss_nt_user_name,&gss_username);
if (maj_stat != GSS_S_COMPLETE) {
printf("parsing client name %d %d \n ", maj_stat, min_stat);
return -1;
}
printf("Maj stat after gss_import_name: %d \n", maj_stat);
printf("Acquired username \n");
//getting username complete

//getting password

pwbuf.value = password;
pwbuf.length = strlen(password);

maj_stat = gss_acquire_cred_with_password(&min_stat,
gss_username,
&pwbuf, 0,
mechsp, GSS_C_INITIATE,
&cred, NULL, NULL);
printf("Acquired password \n");//getting password complete
printf("Maj stat and min stat after gss_acquire_cred_with_password: %d %d\n",     maj_stat, min_stat);
return(cred);
}

Теперь я печатаю основной статус (статус уровня gssapi) и второстепенный статус (статус уровня механизма) — в данном случае это Kerberos. Когда я даю зарегистрированному пользователю (то есть asanyal) сообщение printf состояния дает 0 для обоих значений (все идет хорошо)

Однако, когда я использую другое имя пользователя (это зарегистрировано в Active Directory, но я не вошел как он), я получаю

majstat = 851968 and minstat = -1765328243

Дальнейшее расследование показало, что это незначительное сообщение о состоянии соответствует ошибке

KRB5_CC_NOTFOUND    Matching credential not found

Я уверен, что передаю правильные учетные данные (пароль пользователя) для не авторизованных пользователей)

Это что-то не так с GSSAPI внутри (возможно, он не может получить билет или что-то в этом роде) или я делаю какую-то ошибку?

Используемая конфигурация: библиотеки Windows Active Directory (Windows Server 2008) и MIT kerberos — версия 4.0.1

2

Решение

Хорошо, я понял, что GSS-API не включает в себя какие-либо вызовы API для прямого получения TGT, ST. Для этого вам понадобится krb api (в случае базового механизма kerberos). Как правило, вам понадобится такая функция:

krb5_get_init_creds_password(context,&creds,principal,conn->passwd,NULL,NULL,NULL,NULL,opts))            //these are the arguments i specified in my program

наряду с определенным контекстом, кэшем учетных данных и основными частями инициализации.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]