我不太确定我是否给出了正确的描述。
最重要的是,我尝试将Windows Authentication
添加到node.js网站。
我使用401
标题发回WWW-Authenticate: Negotiate
。
浏览器会立即触发authorization
标头,其值为Negotiate <some string of characters>
此时,我只想确保令牌有效。我试图找到其他开源框架的例子,但我并不知道我在寻找什么。
为了清楚起见,用户已经登录到域并且没有发送用户名/密码信息。
(我可能不完全理解这一切是如何运作的。)
我刚刚找到this。
服务器解码NegTokenInit,提取支持的MechTypes( MechTypeList前面的一个应该是Kerberos Legacy 或Kerberos V5),确保它是预期的之一,然后 提取MechToken并使用进行身份验证 gss_accept_security_context。
如果我理解正确,我正在寻找gss_accept_security_context
。
我也尝试在java中使用GSSManager
而没有运气。我发布了这个问题here。
我是朝着正确的方向前进的吗?
答案 0 :(得分:1)
我最近提交了上面提到的kerberos模块的拉取请求(https://www.npmjs.org/package/kerberos)来实现服务器端身份验证。以前该模块只实现了客户端API。
我还创建了一个护照身份验证策略,passport-negotiate(https://www.npmjs.com/package/passport-negotiate),它利用此策略并实现服务器端HTTP身份验证,包括401和WWW-Authenticate。
您可以在此处查看详细信息:
https://github.com/dmansfield/passport-negotiate/blob/master/lib/passport-negotiate/strategy.js
不幸的是,除非将pull请求合并到kerberos模块并且有新版本,否则这将无法工作,或者您可以从我的github获取修补版本的kerberos:
答案 1 :(得分:0)
您可以看一下node-expose-sspi模块的源代码。因为它确实在做您想要做的事情:所以它使用名为--aot
的SSPI函数来验证Kerberos / NTLM令牌。
https://github.com/jlguenego/node-expose-sspi
注意:我是该模块的作者。