你的位置:首页 > 软件开发 > ASP.net > ASP.NET WEBAPI 的身份验证和授权

ASP.NET WEBAPI 的身份验证和授权

发布时间:2016-07-28 11:00:14
定义身份验证(Authentication):确定用户是谁。授权(Authorization):确定用户能做什么,不能做什么。身份验证WebApi 假定身份验证发生在宿主程序称中。对于 web-hosting,宿主是 IIS。这种情况下使用 HTTP Module 进行验证。验证 ...

定义

身份验证(Authentication):确定用户是谁。

授权(Authorization):确定用户能做什么,不能做什么。

身份验证

WebApi 假定身份验证发生在宿主程序称中。对于 web-hosting,宿主是 get='_blank'>IIS。这种情况下使用 HTTP Module 进行验证。

验证时,宿主会创建一个表示安全上下文的主体对象(实现 IPrincipal),将它附加到当前线程。主体对象包含一个存储用户信息的 Identity 对象。若验证成功,Identity.IsAuthenticated 属性将返回 true。

HTTP 消息处理程序(HTTP Message Handler)

可以用 HTTP 消息处理程序代替宿主进行身份验证。这种情况下,由 HTTP 消息处理程序检查请求并设置主体对象。

请考虑以下事项决定是否使用消息处理程序进行身份验证:

  • HTTP 模块检查所有经过 asp.net 管道的请求,消息处理程序只检查路由到 WebAPI的请求。
  • 可以为每个路由单独设置消息处理程序。
  • HTTP 模块仅在 IIS 中可用。消息处理程序则与宿主无关,在 web-hosting 和 self-hosting 中均可用。
  • HTTP 模块参与IIS 日志和审计等功能。
  • HTTP模块在管道之前运行,主体在消息处理程序运行之前不会设置,当响应离开 消息处理程序时,主体会恢复成原来的那个。

一般来说,不需要自承载时,HTTP 模块较好。

设置主体

进行自定义身份验证时,应在两个地方设置主体对象:

  • Thread.CurrentPrincipal,这是 .net 中设置线程主体的标准方式。
  • HttpContext.Current.User 这是特定于 ASP.NET 的属性。
private void SetPrincipal(IPrincipal principal){  Thread.CurrentPrincipal = principal;  if (HttpContext.Current != null)  {    HttpContext.Current.User = principal;  }}

原标题:ASP.NET WEBAPI 的身份验证和授权

关键词:ASP.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。