优势
Http Digest是一种Http(不仅限于Web页面)认证框架,相比通常使用的基本认证,Digest认证的优点是相对安全、基于网络标准和简单,它不需要编写登录表单页面,对登录信息进行加密,这样就可以很好的支持较安全的程序自动连接(非浏览器连接),可以广泛的应用到数据服务领域。
实现
在Rails中实现Http Digest认证是非常简单的,有两个步骤:
1. 在控制器中配置一个before_filter过滤器,指向验证方法
2. 定义一个验证方法,使用 authenticate_or_request_with_http_digest 语句块就可以了
实现代码如下
# 定义before_filer过滤器,指向验证函数
before_filter :dig_auth
# 在此处定义了密码数字,当然也可以用数据库或者自己定义的验证函数
USERS = { "yanjh" => "hello","shixc" => "hello" }
Realm="cdcr.com"
# 验证方法
def dig_auth
authenticate_or_request_with_http_digest(Realm) do |name|
# 当前验证的用户,预先赋给一个会话变量
@cuser=name
# 向语句块(认证系统)返回用户密码,由系统判断该密码匹配,通过验证后续的方法会执行,否则返回验证失败头信息
USERS[name]
end
end
原理
在网络上基本上没有人探讨该认证方式实现的原理,经过实验和分析,大体搞清楚了Digest验证的原理。
通常验证我们会直接从认证请求中获得用户名和密码,然后自己判断匹配性;但在这里我们只能获取用户名,然后我们可以依据此用户名在外部查找密码(明文或者md5密文都可以),返回给认证系统,再次注意,这里返回的是密码!再由系统来判断是否匹配,这样虽然逻辑上有点古怪,但将认证密码传输和解析黑箱化,确实更安全了。
原文链接:http://hi.baidu.com/yan__jh/blog/item/2f263100df2077f509fa93a7.html