python web api authorization_Web APi之认证(Authentication)两种实现方式【二】(十三)...

本文介绍了Python Web API中两种认证实现方式:基于AuthorizationFilterAttribute的认证过滤器和基于HttpMessageHandler的消息处理管道。详细讲解了如何自定义认证身份、认证过滤器以及消息处理管道,以确保Web API的安全。内容包括基础认证的原理、认证流程和代码实现。
摘要由CSDN通过智能技术生成

前言

上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话。

序言

对于所谓的认证说到底就是安全问题,在Web API中有多种方式来实现安全,【accepted】方式来处理基于IIS的安全(通过上节提到的WindowsIdentity依赖于HttpContext和IIS认证)或者在Web API里通过使用Web API中的消息处理机制,但是如果我们想应用程序运行在IIS之外此时Windows Idenitity这一方式似乎就不太可能了,同时在Web API中本身就未提供如何处理认证的直接方式,我们不得不自定义来实现认证功能,同时这也是我们所推荐的方式,自己动手,丰衣足食。

温馨提示:下面实现方法皆基于基础认证,若不熟悉Http协议中的Basic基础认证,请先参看此篇文章【园友海鸟-介绍Basic基础认证和Digest摘要认证】。

无论何种方式,对于我们的应用程序我们都需要在业务层使用基于凭证的用户认证,因为是客户端一方的需求,所以客户端需要明确基础验证,基础认证(Basic)非常简单并且支持任何Web客户端,但是基础验证的缺点是不安全,通过使用SSL则可以进行加密就可以在一定程度上保证了安全,如果是对于一般的应用程序通过基础认证只是进行编码而未加密也可以说是安全的。我们还是看看上一节所给图片

通过上述图片的粗略信息我们可以看出在请求到Action方法之间要经过Web API消息处理管道,在请求到目标元素之前要经过HttpMessageHandler和认证过滤器,所以我们可以通过这两者来自定义实现认证。下面我们一一来看。

基于Web API的认证过滤器(AuthorizationFilterAttribute)实现认证

第一步

我们自定义一个认证身份(用户名和密码)的类,那么此类必须也就要继承于 GenericIdentity ,既然是基于基础验证,那么类型当然也就是Basic了。

public class BasicAuthenticationIdentity : GenericIdentity

{

public string Password { get; set; }

public BasicAuthenticationIdentity(string name, string password)

: base(name, "Basic")

{

this.Password = password;

}

}

第二步

我们要自定义一个认证过滤器特性,并继承 AuthorizationFilterAttribute ,此时会变成如下:

public class BasicAuthenticationFilter : AuthorizationFilterAttribute

{

public override void OnAuthorization(HttpActionContext actionContext)

{}

}

那么在这个重写的方法我们应该写什么呢?我们慢慢来分析!请往下看。

解析请求报文头

首先对于客户端发送过来的请求我们肯定是需要获得请求报头,然后解析请求报头中的Authorization,若此时其参数为空,我们将返回到客户端,并发起质询。

string authParameter = null;var authValue =actionContext.Request.Headers.Authorization; //actionContext:Action方法请求上下文if (authValue != null && authValue.Scheme == "Basic")

authParameter=authValue.Parameter; //authparameter:获取请求中经过Base64编码的(用户:密码)if (string.IsNullOrEmpty(authParameter))ret

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值