初一七月

你必须承认,我们生存的这个世界取决于自身的能力而非别人的保护(AW)
随笔 - 23, 文章 - 0, 评论 - 11, 引用 - 0
数据加载中……

HTTP添加Basic认证

一个web站点,总会有一些资源需要保护,比如图片文件、某些页面等,使用basic认证简单方便,易于配置,且完全独立于开发。basic认证既可以在web容器上,也可以放到前端服务器上。

resin配置

basic的resin配置需要在web项目的描述文件web.xml中,通过添加如下内容,可以对指定路径的资源进行保护,所有对指定资源的访问,都需要输入配置的用户名与密码,验证通过后才可以正常访问。

<authenticator type="com.caucho.server.security.XmlAuthenticator">
    
<init>
    
<user>user:pass:admin</user>
    
<password-digest>none</password-digest>
    
</init>
</authenticator>
<login-config auth-method="basic" />
<security-constraint url-pattern="/admin/**" role-name="admin" />

上面的配置代表当用户访问以yourapp/admin/开头的所有资源时,都需要通过basic认证(如果之前还没有通过的话),用户名是user,密码是pass。有时候需要保护的资源不止一项,那么可以用如下的方法配置。

<authenticator type="com.caucho.server.security.XmlAuthenticator">
    
<init>
    
<user>user:pass:admin</user>
    
<password-digest>none</password-digest>
    
</init>
</authenticator>
<login-config auth-method="basic" />
<security-constraint>  
    
<web-resource-collection>  
    
<web-resource-name>Protected Context</web-resource-name>  
        
<url-pattern>/admin/**</url-pattern>     
        
<url-pattern>/manage/**</url-pattern>
    
</web-resource-collection>  
    
<auth-constraint role-name='admin' />   
</security-constraint>

此时所有以yourapp/admin/或者yourapp/manage/开头的资源都需要经过basic认证。

nginx配置

虽然resin的配置也可以达到效果,但是毕竟是配置到了工程文件中,以后定期更换用户名与密码,都得更新项目描述符;而且有个更要命的问题,如果一个resin上有多个项目的话,一次更新就需要修改所有相关项目的web.xml文件,太麻烦了。在nginx上也可以配置basic认证,而且更简单。

nginx的http basic认证密码是用crypt(3)加密的,可以试用apache的htpasswd生成密码文件。首先进入apache的安装目录,进入apache/bin/目录下,可以看到htpasswd,输入如下命令生成密码文件。

htpasswd -c -d pass_file user_name


其中-c表示生成文件,-d表示是以crypt加密,pass_file是密码文件名,user_name表示basic认证的用户名,回车后会提示输入密码,然后再次输入确认,生成密码文件完成。

然后就是配置nginx,nginx的认证需要配置到location下,如下所示。

location ~ /admin/manage {
    auth_basic  "Auth";
    auth_basic_user_file  pass_file;
}

其中Auth可以随意设置,它只不过是当需要认证时弹出窗口的服务显示名称而已,pass_file就是我们之前生成的密码文件,这里要注意nginx 0.6.7开始,auth_basic_user_file的相对目录是nginx_home/conf,以前版本的相对目录是nginx_home,现在只要访问包含/admin/manage路径的资源都会弹出认证框,而且对于一个nginx代理了n个web服务的情况,需要更换用户名与密码时,只需要将密码文件替换一次即可,比第一种方式方便可靠了很多。

posted on 2011-02-23 22:41 初一七月 阅读(4652) 评论(2)  编辑  收藏 所属分类: Web

评论

# re: HTTP添加Basic认证  回复  更多评论   

能不能讲讲http basic在实际工作用的应用呀。。。。。。。
2012-08-23 09:59 | phperstar

# re: HTTP添加Basic认证  回复  更多评论   

请问,添加basic认证后,会弹出输入用户名和密码的窗口,有没有办法让nginx记住用户名密码,下次可以自动登录啊?
2014-05-05 17:55 | liuzx

只有注册用户登录后才能发表评论。


网站导航: