欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php怎样实现获取本地域帐号而不用输入用户名和密码登录网站?

程序员文章站 2022-06-11 10:17:41
...
目前有一个需求:用户通过域帐号登录了电脑,打开网站(PHP开发的),不需要用户再次输入用户名和密码,而是直接获取本机的域帐号登录系统。

也就是说网站上的用户帐号和本机的域帐号一致的,只要我登录了电脑,我打开浏览器登录网站时,网站不会提示用户输入账号和密码登录,直接登录网站

PHP能实现这样的功能吗?如果不行的话,有没有其他的技术可以支持?比如java, python, c之类的

我也了解过,php有个ladp的扩展,但是这个扩展还是需要接收用户名和密码

现在有些OA系统实现了这样的功能,又是怎么做到的呢?

回复内容:

目前有一个需求:用户通过域帐号登录了电脑,打开网站(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的权限非常低,不在浏览器上装点啥,能做的就上面三种了。

如果可以装点啥,那办法就多了

  • 数字证书。员工初始化时,内网服务器给他颁发内网证书(就是不用交钱的,不用VeriSign他们认证的),证书里写入员工账号、邮箱什么的,每次访问服务端时,浏览器检查到域名匹配就会自动把证书信息发给服务端。这个在大企业里用得比较多,也无需开发浏览器插件。
  • 浏览器插件。先用插件把桌面系统的各种身份信息取到,再附在Header里发给服务端,服务端就知道当前登录的域账号是什么了。前面说了,浏览器里的JS权限很低,插件的权限可是很高的,插队的权限取决于你的浏览器以什么用户启动的。对你的取当前登录域账号的需求,肯定是绰绰有余了。

我曾经在sf上回答过一个类似的问题。

很简单:
生成一个token,字母和数字组合的那种,做成链接做成浏览器书签或者首页,可以开机自动启动浏览器打开首页。

这种方法很简单,但是要求网络要安全,或者,用https吧。

安装浏览器扩展插件。这是最完美的方案了吧- -

可以将用户第一次登陆的域帐号、账号、密码写入一个文件,或者存入一个表,下次再登陆的时候,进行一下查找判断

写个浏览器, 包上.

你这个已经不是PHP做的事情了,php是服务器端的脚本,怎么能处理浏览器的事情?

解决方案:写浏览器插件

相关标签: php