php怎样实现获取本地域帐号而不用输入用户名和密码登录网站?
ringa_lee
ringa_lee 2017-04-10 14:34:37
0
6
975

目前有一个需求:用户通过域帐号登录了电脑,打开网站(PHP开发的),不需要用户再次输入用户名和密码,而是直接获取本机的域帐号登录系统。

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

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

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

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

ringa_lee
ringa_lee

ringa_lee

répondre à tous(6)
阿神

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权限很低,插件的权限可是很高的,插队的权限取决于你的浏览器以什么用户启动的。对你的取当前登录域账号的需求,肯定是绰绰有余了。
Ty80

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

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

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

巴扎黑

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

小葫芦

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

迷茫

写个浏览器, 包上.

Peter_Zhu

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

解决方案:写浏览器插件

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!