目前有一个需求:用户通过域帐号登录了电脑,打开网站(PHP开发的),不需要用户再次输入用户名和密码,而是直接获取本机的域帐号登录系统。
也就是说网站上的用户帐号和本机的域帐号一致的,只要我登录了电脑,我打开浏览器登录网站时,网站不会提示用户输入账号和密码登录,直接登录网站
PHP能实现这样的功能吗?如果不行的话,有没有其他的技术可以支持?比如java, python, c之类的
我也了解过,php有个ladp的扩展,但是这个扩展还是需要接收用户名和密码
现在有些OA系统实现了这样的功能,又是怎么做到的呢?
LDAP扩展跟MySQL扩展一样,本质上是从后端存储系统读取用户名和密码的,只不过它的速度特别快。你的问题关键在浏览器端,如何向服务器端提交一个身份证明(代替客户手工输入用户名和密码)。
这个身份证明可以是:
URL中的随机串(或者HEADER中也行),这就是前面@JohnLui 的解决方案了。你可以理解为一个有效期非常长的Session ID。在某些网站的WAP版,就是这么干的,如以前的kaixin001.com,因为那个年代手机浏览器的Cookie经常不靠谱,而手机私密性较好,所以采用这种方式。
$_SERVER['REMOTE_ADDR'],如果你们内网的IP是固定的,且对安全要求不是特别高,可以用这种方式临时顶一顶,取到客户端IP之后,去IP-员工对应表里查一下员工名,然后赋予此员工已登录的状态。
$_SERVER['REMOTE_ADDR'] + LDAP Log,或者Active Directory Log。如果你们的员工电脑都必须通过域账号才能登录,那么,取到客户端IP之后,去LDAP/AD的日志里查一下,刚刚从这个IP登录的是哪个员工。由于他在操作系统桌面登录时已经通过了域账号验证,所以这种方法比上面那种安全很多。
B/S架构编程限制了,你只能通过$_GET, $_POST, $_SERVER等变量向服务器端提交身份证明(说白了,你绕不过HTTP),而浏览器里JS的权限非常低,不在浏览器上装点啥,能做的就上面三种了。
如果可以装点啥,那办法就多了:
我曾经在sf上回答过一个类似的问题。
很简单:
生成一个token,字母和数字组合的那种,做成链接做成浏览器书签或者首页,可以开机自动启动浏览器打开首页。
这种方法很简单,但是要求网络要安全,或者,用https吧。
安装浏览器扩展插件。这是最完美的方案了吧- -
可以将用户第一次登陆的域帐号、账号、密码写入一个文件,或者存入一个表,下次再登陆的时候,进行一下查找判断
写个浏览器, 包上.
你这个已经不是PHP做的事情了,php是服务器端的脚本,怎么能处理浏览器的事情?
解决方案:写浏览器插件