在前一篇文章ASP.NET Web API(一):使用初探,GET和POST数据中,我们初步接触了微软的REST API: Web API。
我们在接触了Web API的后就立马发现了有安全验证的需求,所以这篇文章我们先来讨论下 安全验证一个最简单的方法:使用HTTP基本认证。
HTTP基本认证原理
在HTTP协议进行通信的过 程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份认证的方法,当一个客户端 向HTTP服务器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本认证过程对客户端的用户名及 密码进行验证,以决定用户是否合法。
其基本的实现方式是:
客户端在用户输入用户名及密码 后,将用户名及密码以BASE64加密,加密后的密文将附加于请求信息中,如当用户名为Parry,密码为123456 时,客户端将用户名和密码用":"合并,并将合并后的字符串用BASE64加密,并于每次请求数据时 ,将密文附加于请求头(Request Header)中。
HTTP服务器在每次收到请求包后,根据协议取得客户 端附加的用户信息(BASE64加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用户名及密 码正确,则根据客户端请求,返回客户端所需要的数据;否则,返回错误代码或重新要求客户端提供用户名及 密码。
Web API使用HTTP基本认证进行安全验证
我们还是基于前一篇文章的示例进行测试。
首先我 们基于System.Web.Http.AuthorizeAttribute类实现一个HTTP基本认证的类,并实现两个方法: OnAuthorization和HandleUnauthorizedRequest。
添加一个类HTTPBasicAuthorizeAttribute,继承于 System.Web.Http.AuthorizeAttribute,先来实现OnAuthorization。
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) { if (actionContext.Request.Headers.Authorization != null) { string userInfo = Encoding.Default.GetString(Convert.FromBase64String (actionContext.Request.Headers.Authorization.Parameter)); //用户验证逻辑 if (string.Equals(userInfo, string.Format("{0}:{1}", "Parry", "123456"))) { IsAuthorized(actionContext); } else { HandleUnauthorizedRequest(actionContext); } } else { HandleUnauthorizedRequest(actionContext); } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索密码
, http
, web api
, 请求api
, 用户名
, 认证
, AuthorizeAttribute
, 请求加密
, AuthorizeAttribute
, 基本
, ActionContext
, 基本安全
HTTP认证
,以便于您获取更多的相关知识。