HTTP Basic Authentication for RESTFul Service

面对用户认证的问题。最常见的实现方式一般是这样的:用户提交一个含有用户名和密码的表单,服务端脚本验证其合法性,如果通过验证,则在Session里标识一下,如此一来,在同一个Session周期里,用户就维持了自己的认证状态。基于Session的认证最大的问题在于它不符合REST风格,更直接一点说,它破坏了HTTP的无状态特性,从而对可扩展性造成障碍。 RFC2617里规定的两种标准的认证方式(Baisc,Digest),和Session方式最根本的不同是,它们是符合HTTP无状态特性的,所以相对而言更值得推荐。

什么是HTTP Basic Authentication?直接看http://en.wikipedia.org/wiki/Basic_authentication_scheme吧。

在你访问一个需要HTTP Basic Authentication的URL的时候,如果你没有提供用户名和密码,服务器就会返回401,如果你直接在浏览器中打开,浏览器会提示你输入用户名和密码(google浏览器不会).

要在发送请求的时候添加HTTP Basic Authentication认证信息到请求中,有两种方法:

  • 一是在请求头中添加Authorization: Authorization: "Basic 用户名和密码的base64加密字符串"
  • 二是在url中添加用户名和密码:

WCF Data Services团队最近发表了一系列关于OData服务和客户端上可用验证机制的文章。具体参看http://www.infoq.com/cn/news/2010/07/odata-authentication-series,其中也有介绍到HTTP Basic Authentication :

Custom Basic Authentication(自定义基本验证)——涉及在基础结构级别(如IIS)上进行的基本质询响应(challenge-response)验证的场景。假如简单的用户名/密码不能满足要求,还要支持用户/密码信息存储在数据库中的情况。

对于IIS 7来说,Codeplex上有个项目可以解决这个问题:http://custombasicauth.codeplex.com

customBasicAuth的安装方法:

1、已管理员身份打开命令行

rem ----------- !!! RUN AS ADMINISTRATOR !!! rem --- 2、将程序集注册到GAC

----------- 1 GAC DLLs -----------------

rem HTTP module gacutil -if LeastPrivilege.CustomBasicAuthenticationModule.dll

rem Server configuration module gacutil -if LeastPrivilege.CustomBasicAuthentication.Management.dll

rem Client UI module gacutil -if LeastPrivilege.CustomBasicAuthentication.Management.Client.dll

3、注册CustomBasicAuthentication_schema

rem ----------- 2 Register Schema ----------------- iisschema.exe /install CustomBasicAuthentication_schema.xml

4、注册管理端

rem----------- 2 Register Management  ----------------- IisRegMgmt CustomBasicAuth LeastPrivilege.CustomBasicAuthentication.Management.CustomBasicAuthenticationModuleProvider LeastPrivilege.CustomBasicAuthentication.Management.dll

5、在具体的Web应用程序中设置,主要参考下面的文章:

http://www.leastprivilege.com/HTTPBasicAuthenticationAgainstNonWindowsAccountsInIISASPNETPart3AddingWCFSupport.aspx

相关文章:

Custom Security OData Service – Wcf Data Services

http://franssenden.wordpress.com/2010/06/14/custom-security-odata-service-wcf-data-services/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构沉思录

单点登录原理与简单实现

web应用通常采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关...

1302
来自专栏黑白安全

emlog敏感信息泄漏漏洞

漏洞复现:登录状态后访问http://xxx.xxx/admin/index.php?action=phpinfo

902
来自专栏微信公众号:Java团长

单点登录原理与简单实现

web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,...

1974
来自专栏前端知识分享

第160天:Http协议的详细总结

超文本传输协议(HyperText Transfer Protocol),缩写HTTP。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform...

902
来自专栏Seebug漏洞平台

zzcms 8.2 任意用户密码修改

作者:Sebao@知道创宇404实验室 漏 洞 描 述 zzcms是一款企业建站程序。zzcms 8.2版本/one/getpassword.php文件存在漏洞...

4039
来自专栏吴伟祥

单点登录原理与简单实现 原

web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联...

1165
来自专栏抠抠空间

Flask之session相关

除请求对象之外,还有一个 session 对象。它允许你在不同请求间存储特定用户的信息。它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥...

662
来自专栏我的博客

PHP错误提示failed to open stream: Too many open files

项目遇到的这个问题failed to open stream: Too many open files 检查PHP脚本发现发起很多curl请求,于是看curl是...

3665
来自专栏Rgc

django 三种缓存模式的使用及注意点

    @cache_control,@vary_on_headers,@vary_on_cookie 

1172
来自专栏linux系统运维

访问日志不记录静态文件,访问日志切割,静态元素过期时间

2156

扫码关注云+社区

领取腾讯云代金券