C+的示例+;客户端摘要-MD5使用windows进行sasl身份验证 P>可以有人帮助我一个简单的例子,如何在java SASL服务器上对Windows C++ API的Windows C++进行身份验证:我的意思是使用获取命令Shandle,InitializeSecurityContext……/P>

C+的示例+;客户端摘要-MD5使用windows进行sasl身份验证 P>可以有人帮助我一个简单的例子,如何在java SASL服务器上对Windows C++ API的Windows C++进行身份验证:我的意思是使用获取命令Shandle,InitializeSecurityContext……/P>,c++,windows,authentication,sasl,sspi,C++,Windows,Authentication,Sasl,Sspi,目前我得到的最佳结果是使用以下配置: set(&credentials, "username", "password", "domain"); ss= AcquireCredentialsHandle(NULL, "WDigest", SECPKG_CRED_OUTBOUND, NULL , &credentials, NULL, NULL, &hCred, &tsExpiry); OutBuff

目前我得到的最佳结果是使用以下配置:

set(&credentials, "username", "password", "domain");
ss= AcquireCredentialsHandle(NULL, "WDigest", SECPKG_CRED_OUTBOUND, NULL      
                            , &credentials, NULL, NULL, &hCred, &tsExpiry);
OutBuffers[0].pvBuffer = NULL;
OutBuffers[0].BufferType = SECBUFFER_TOKEN;
OutBuffers[0].cbBuffer = 0;
OutBuffer.cBuffers = 1;
OutBuffer.pBuffers = OutBuffers;
OutBuffer.ulVersion = SECBUFFER_VERSION;
scRet = InitializeSecurityContext(&hCred, NULL, "server", ISC_REQ_ALLOCATE_MEMORY
                                 , 0, SECURITY_NATIVE_DREP, NULL, 0, hContext
                                 , &OutBuffer, &dwSSPIOutFlags, &tsExpiry);

ss结果正常,scRet是SEC_I__CONTINUE_所需的,但突发[0]是空的,因此我没有任何东西可以发送到服务器以继续身份验证过程。

您将digest与schannel混淆(第一次调用中的客户端使用0作为输入缓冲区)。在digest visa versa中-第一个服务器调用和客户端调用和输入缓冲区不能为空,但感谢@RbMm!你的评论真的帮助了我。我已经用这种方式修复了我的摘要过程:1请求服务器进行质询2使用服务器响应填充SECBUFFER_令牌,并调用InitializeSecurityContext 3将突发发送到服务器4循环到2,直到身份验证完成您将摘要与schannel混淆(第一次调用中的客户端使用0作为输入缓冲区)。在digest visa versa中-第一个服务器调用和客户端调用和输入缓冲区不能为空,但感谢@RbMm!你的评论真的帮助了我。我已通过以下方式修复了我的摘要过程:1向服务器请求质询2使用服务器响应填充SECBUFFER_令牌,并调用InitializeSecurityContext 3将突发发送到服务器4循环2,直到身份验证完成