请保证使用了SSL加密链接后再使用这个方法
请保证使用了SSL加密链接后再使用这个方法
请保证使用了SSL加密链接后再使用这个方法
想要一个简单登录,按照一般做法,最少的需要
- 登录界面
- 用户和密码的存储(数据库的建设)
- 用户管理后台
- 相应的前后台代码
- 各种防护措施
简直多的令人发指,那么能做到上面这些的最简办法呢,我觉得就是使用apache的auth模块。
但是因为auth是用的base64编码的,本身没有安全性可言,所以没什么人用。
然而事实上,使用SSL加密以后的链接,即使明文传递,安全性也是有很大的保障的。
所以这是为什么用这个方法一定要用SSL加密的连接。加上有letsencrypt,获得一个ssl证书也是很简单的事。
apache的设置
首先要开启apache的auth_basic模块,然后在authn_xxx里面选择一个存储密码的方法,这里选择最简单的file。1
2$ sudo a2enmod auth_basic
$ sudo a2enmod authn_file
开启以后需要在必要的地方开启,比如说后台所在的文件夹,用.htaccess文件或则在主配置文件里面配置相应的设置。
1 | AuthType Basic |
AuthName可以修改为自己想要的,同一个AuthName共享一个credential。 AuthBasicProvider就是使用的authn里面的哪一个 AuthUserFile 就是密码文本的位置,使用文本的时候
超过百个记录时可以感受到性能下降
Require 这里可以指定哪些用户或者组可以访问,但是可以用valid-user来表示所有输入正确的用户名和密码的用户
用户管理
这里用户管理主要使用apache的工具htpasswd 首先添加第一个admin用户,密码admin
1 | $ sudo htpasswd -c test.passwd admin |
这样就存好了一个用户了,这里的test.passwd就是之前的AuthUserFile指向的密码文件 后面再加用户就不必用-c参数了 可以使用-B来使用比较安全的方法来加密密码,要不然默认就是md5 另外,不喜欢重新验证密码的话可以加-b参数直接在命令里面加,但是这样会在bash的历史里面看到密码。 所以最后一个比较常用的添加命令就是
1 | $ htpasswd -Bb test.passwd test test |
删除使用-D1
2$ htpasswd -D test.passwd test
Deleting password for user test
其实这个文件也是可以直接修改的,使用-n命令直接输出可以加入passwd文件的东西,然后直接去改源文件即可1
2$ htpasswd -Bbn test test
test:$2y$05$3mKlyugnWWMusRviRG/Dw.jLQIjr6sXFB3q9/7nABC4Ho33YCmISS
把下面这段直接加到文件中即可,这样就实现了简单的用户管理。
至此,已经可以正常使用了。
登录信息
当前的登录用户的信息是可以在环境变量里面获取的,用编程语言获取即可。
登出
因为这种登录方法的credentials是session有效的,所以不关浏览器就会一直存在。 如果想要强行结束这个session要怎么办呢,简而言之就是怎样登出。 浏览器会每次都带上credentials的,所以只要任意一个request返回401,那么浏览器就会认为当前credential失效了。 就会让用户重新登录,当然是下一次访问需要auth的情况。 那么前端的工作就是访问一个特定的401页面,然后等待返回确定为401,然后window.location.reload()即可。 附上一个,apache设置一个endpoint直接返回401的http status code1
2RewriteEngine on
RewriteRule ^logout$ - [R=401]
只要访问/logout即可登出相应的AuthName范围内的所有credentials,用xhr也可以实现。