专栏首页张善友的专栏HTTP Basic Authentication for RESTFul Service

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 条评论
登录 后参与评论

相关文章

  • LINQ TO XML

    在.NET3.5中,框架对XML的操作进行了扩展,这个扩展就是LINQ to XML。在名称空间System.Xml.LINQ下。LINQ to XML 类型继...

    张善友
  • 用sp_change_users_login消除Sql Server的孤立用户

    孤立帐户,就是某个数据库的帐户只有用户名而没有登录名,这样的用户在用户库的sysusers系统表中存在,而在master数据库的syslogins中却没有对应的...

    张善友
  • Windows Server 2008上安装 Windows SharePoint Services 3.0

    在Windows Server 2008上安装WSS 3.0,需要直接安装WSS 3.0 SP1,可参看 Windows SharePoint Services...

    张善友
  • JvmName 注解在 Kotlin 中的应用

    JvmName注解是Kotlin提供的一个可以变更编译器输出的注解,这里简单的介绍一下其使用规则。

    技术小黑屋
  • 掀起 Traefik 2 的盖头来

    我的测试集群中经常会使用 Traefik 做 Ingress,又有 Maesh 加入 Service Mesh 的暖场战之中,所以 Traefik 2.0 还是...

    崔秀龙
  • 如何使用Hetty对HTTP进行安全研究审计

    Hetty是一款针对安全研究设计的HTTP工具套件,该工具的目标是成为一些商业软件(比如说BurpSuite Pro)的开源替代产品。该工具的功能十分强大,并且...

    FB客服
  • 详解linux usb host驱动编写入门

    usb协议是一个复杂的协议,目前涉及到的版本就有usb1.0, usb2.0, usb3.0。大家如果打开kernel usb host目录,就会发现下面包含了...

    砸漏
  • 第32项:谨慎地结合泛型和可变参数(Combine generics and varargs judiciously)

    可变参数方法(第53项)和泛型都在Java 5时添加到了平台中,所以你可能会期望它们会优雅地相互作用;可悲的是,它们不能相互作用。可变的目的是允许客户端将数量可...

    用户7886150
  • 浅谈Linux环境下gcc优化级别

    代码优化可以说是一个非常复杂而又非常重要的问题,以笔者多年的linux c开发经验来说优化通常分为两个方面,一是人为优化,也就是基于编程经验采用更简易的数据结构...

    砸漏
  • 【技术创作101训练营】我是如何使用freemarker生成Word文件的?

    这个文档有大大小小的标题层级,还有排版好的段落、各种一目了然的饼图、走势图,当然还少不了颜色循环交替的报表。精致程度不亚于小明同学的学习报告。

    程序员小明

扫码关注云+社区

领取腾讯云代金券