使用webapi再所难免会遇到认证需求,毕竟没有认证的服务安全隐患太大。
我们在webapi中进行认证基本上都是新增一个刷选器,继承AuthorizeAttribute。继承后需要重写HandleUnauthorizedRequest方法实现拦截上下文,拦截后可对本次请求进行验证。
如果你的webapi认证秘钥是通过参数进行则需要将参数取出来进行比较,比较通过则认证通过,否则返回401。
我在写的时候发现get方式很简单,因为参数是直接在url后,截取下就ok了,但是post方式则取不到参数,在网上找了好久发现可以通过以下代码截取post的参数:
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) { base.HandleUnauthorizedRequest(actionContext); HttpContent content = actionContext.Request.Content; //执行该句,会将action的参数实体置为空 Task<JObject> task = content.ReadAsAsync<JObject>(); var result = task.Result; if (!data.CheckSign(model.access_secret, task.Result)) { return false; } }