如何验证kerberos令牌(在node.js中)?

时间:2014-08-13 01:00:12

标签: node.js authentication kerberos spnego

我不太确定我是否给出了正确的描述。

最重要的是,我尝试将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

我是朝着正确的方向前进的吗?

2 个答案:

答案 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:

https://github.com/dmansfield/kerberos

答案 1 :(得分:0)

您可以看一下node-expose-sspi模块的源代码。因为它确实在做您想要做的事情:所以它使用名为--aot的SSPI函数来验证Kerberos / NTLM令牌。

https://github.com/jlguenego/node-expose-sspi

注意:我是该模块的作者。