InitializeSecurityContext вернул ошибку 0x80090311 - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужно настроить систему аутентификации активного каталога с использованием Kerberos.Мой AcquireCredentialsHandleA класс выглядит следующим образом.https://docs.microsoft.com/en-us/windows/win32/secauthn/acquirecredentialshandle--kerberos

SEC_WINNT_AUTH_IDENTITY AuthData, *pAuthData = NULL;
#ifdef UNICODE
    AuthData.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
#else
    AuthData.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
#endif
    unsigned char username[200] = "user";
    unsigned char domain[200] = "domain.com";
    unsigned char password[100] = "secret";
    AuthData.User = &username[0]; //username
    AuthData.Domain = &domain[0]; //domain
    AuthData.Password = &password[0]; //password
    AuthData.UserLength = AuthData.User ? sizeof(AuthData.User) : 0;
    AuthData.DomainLength = AuthData.Domain ? sizeof(AuthData.Domain) : 0;
    AuthData.PasswordLength = AuthData.Password ? sizeof(AuthData.Password) : 0;

Status = g_pSSPI->AcquireCredentialsHandleA(
        NULL,                 // Name of principal   //pN       
        ppPackageInfo[2].Name,//"kerberos" Name of package 
        SECPKG_CRED_OUTBOUND, // Flags indicating use
        NULL,                 // Pointer to logon ID
        pAuthData, //NULL,    // Package specific data
        NULL,                 // Pointer to GetKey() func
        NULL,                 // Value to pass to GetKey()
        phCreds,              // (out) Cred Handle
        &tsExpiry
    );  

Возвращает Успех.Однако, когда я вызываю свою функцию InitializeSecurityContextA, она выдает ошибку 0x80090311, что означает SEC_E_NO_AUTHENTICATING_AUTHORITY.Я перепробовал всевозможные доменные имена и т. Д. Когда я делаю ksetup в PowerShell, он может генерировать билет с теми же учетными данными.Но код всегда терпит неудачу.Кто-нибудь может определить здесь какие-либо проблемы?

dwSSPIFlags = ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_USE_SESSION_KEY | ISC_REQ_CONNECTION; // Not sure at all about them flags

    OutBuffers[0].pvBuffer = NULL;
    OutBuffers[0].BufferType = SECBUFFER_TOKEN; //2
    //OutBuffers[0].cbBuffer = 0;
    OutBuffers[0].cbBuffer = 7084;

    OutBuffer.cBuffers = 1;
    OutBuffer.pBuffers = OutBuffers;
    OutBuffer.ulVersion = SECBUFFER_VERSION; //0    
    Status = g_pSSPI->InitializeSecurityContextA
            (
                phCreds,
                fHaveCtxtHandle ? phContext : NULL,//phContext, can be NULL for the first call 
                server, 
                dwSSPIFlags,
                0,
                SECURITY_NETWORK_DREP,//SECURITY_NATIVE_DREP,
                fHaveCtxtHandle ? &InBuffer : NULL,
                0,
                fHaveCtxtHandle ? NULL : phContext ,
                &OutBuffer,
                &dwSSPIOutFlags,
                &tsExpiry
            );

Кто-нибудь может мне помочь с этим?Большое спасибо.:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...