如何使用参数(通过HTTP)对NTLM进行身份验证?

时间:2015-11-24 14:04:05

标签: c++ winapi ntlm sspi

我正在使用InitializeSecurityContext函数为HTTP中的NTLM身份验证生成类型1和类型3消息。当我收到默认标题时,一切正常:

WWW-Authenticate: NTLM

但是,当我收到像:

这样的标题时
WWW-Authenticate: NTLM realm="SIP Communications Service", targetname="server.domain.com", version=4

它不会接受Type 1消息,我再次收到所有WWW-Authenticate标头。 这是我用来产生第一个响应的函数:

result = SSPI()->InitializeSecurityContextW(
    credHandle, // phCredential
    0, // phContext
    0, // *pszTargetName
    ISC_REQ_USE_DCE_STYLE | ISC_REQ_DELEGATE | ISC_REQ_MUTUAL_AUTH
        | ISC_REQ_REPLAY_DETECT | ISC_REQ_SEQUENCE_DETECT
        | ISC_REQ_CONFIDENTIALITY | ISC_REQ_CONNECTION, // fContextReq
    0, // Reserved1
    0, // TargetDataRep
    0, // pInput
    0, // Reserved2
    context, // phNewContext
    bufferDesc, // pOutput
    &outFlags, // pfContextAttr
    &timestamp // ptsExpiry
);

我已经尝试将pszTargetName设置为L“server.domain.com”,但它也不起作用。

任何想法如何传递领域,目标名称和版本参数(如有必要)? 我正在与Lync 2013服务器进行通信。

1 个答案:

答案 0 :(得分:0)

我可以使用MS-SIPAE文档和NTLM身份验证示例进行身份验证。整个过程在上面的链接中有详细描述。