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

Posted

技术标签:

【中文标题】如何使用参数(通过 HTTP)向 NTLM 进行身份验证?【英文标题】:How to authenticate with NTLM with parameters (via HTTP)? 【发布时间】:2015-11-24 14:04:04 【问题描述】:

我正在使用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】:

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

【讨论】:

以上是关于如何使用参数(通过 HTTP)向 NTLM 进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript/Ajax NTLM 身份验证

如何支持 NTLM 身份验证并回退到 ASP.NET MVC 中的表单?

通过 NTLM 对受保护站点使用 wget

Django 1.11-如何使用仅支持NTLM身份验证的邮件服务器发送邮件

如何使用httpclient进行NTLM认证登录

Windows安全认证是如何进行的?[NTLM篇]