NodeJs NTLM认证(烂尾)

本文介绍了在Node.js中实现NTLM单点登录(SSO)的挑战,包括NTLM认证流程、Windows域认证的NTLM和Kerberos方式,以及遇到的无法在服务器端验证用户密码的问题。文章探讨了使用SMB协议的可能性,但因Node.js缺乏相关库而放弃。最终提出了使用iisnode作为替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正在做的一个公司内部网站,需要用到域认证,无奈,只得学习相关的知识,边学边写:

1. NodeJs的有一个服务器端做认证库的非常好,今天花了半天的时间,简单读了一下代码,觉得设计的不错,很容易扩展,库的名字是connect-auth,看名字就知道是expressJs的一个中间件,等有空就把一些源码阅读的笔记贴上来。

2. 接下来就是记录一些域认证相关的知识:

Windows的域认证,有2个认证方式:NTLM和Kerberos,NTLM很早就说要被淘汰,但是目前好像还是活的好好的,假如服务器端允许Negotiate,那么IE浏览器会有不同选择,参见:http://blog.youkuaiyun.com/yangxin114/article/details/8111958。

简单起见,我就不使用,Negotiate方式了,强制使用NTLM认证。

要启用NTLM认证,服务器端在接收到客户端请求时,返回401 (Unauthorized)并附加 WWW-Authenticate头,值为"NTLM"就行了 (如果要Negotiate,那么就多发一个WWW-Authenticate头,值为Negotiate),客户端接收到服务器的回复之后,浏览器应该会弹出认证的窗口,让用户输入域账号和密码,然后会送一个请求,并附加Authorization头,就这样进入了3次握手的过程(type1,type2,type3)。


更新:nodejs的NTLM好实现,只要根据协议生成hash值就行了,但问题是,服务器端没有办法拿到该用户的域账号密码来核实!查了一下,貌似只有一种方法:使用SMB,CIFS(这篇文章写的很好,NTLM SSO的实现:http://blog.youkuaiyun.com/zoufeiyy/article/details/1694634),但是鉴于Nodejs没有现成的库,实现该协议,所以我放弃了!准备换条路走走,那就是iisnode~。


附那篇文章的内容:

http://blog.youkuaiyun.com/zoufeiyy/article/details/1694634

NTLM SSO的实现

最近项目中要求实现Web应用的SSO(Single Sign On),即对于已经登录到Windows Domain中的用户,不需要输入用户名、密码而直接使用当前登录的Domain用户信息进行验证,如果验证成功则进入,否则拒绝进入。

 

在网上搜了一些资料,同时也对NTLM的认证方式有了些了解,记录之。

 

NTLM HTTP认证

过程如下:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值