WebApi身份验证

一、通过Http请求(不通过过滤器)

        public static UserDTO GetAuthInfo()
        {
            var cur = HttpContext.Current;
            var account= cur.Request.Headers.GetValues(Consts.HTTP_HEADER_AUTH_USER);
            var key = cur.Request.Headers.GetValues(Consts.HTTP_HEADER_AUTH_KEY);

            if (account!=null && key!=null)
            {
                if (account.Any() && key.Any())
                {
                    string strName = account.First();
                    string strKey = key.First();
                    string actionUri = cur.Request.Url.OriginalString;

                    var userInfo = UserService.GetPrivateKey(strName);
                    if (userInfo != null && WebApiServerHelper.VerifyAuthKey(strName, strKey, actionUri, userInfo.Token))
                    {
                        return userInfo;
                    }
                }
            }
            return null;
        }

二、通过过滤器

    public class WebApiAuthFilterAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            if (actionContext.Request.Headers.Contains(Consts.HTTP_HEADER_AUTH_USER) && actionContext.Request.Headers.Contains(Consts.HTTP_HEADER_AUTH_KEY))
            {
                IEnumerable<string> arrCustomAuthName = actionContext.Request.Headers.GetValues(Consts.HTTP_HEADER_AUTH_USER);
                IEnumerable<string> arrCustomAuthKey = actionContext.Request.Headers.GetValues(Consts.HTTP_HEADER_AUTH_KEY);
                if (arrCustomAuthName.Any() && arrCustomAuthKey.Any())
                {

                    WebApiPrincipal principal = GetWebApiPrincipal(arrCustomAuthName.First(), arrCustomAuthKey.First(), actionContext.Request.RequestUri.ToString());
                    if (principal != null)
                    {
                        HttpContext.Current.User = principal;
                        Thread.CurrentPrincipal = principal;
                    }
                }
            }
            //判断用户是否登录
            if (!HttpContext.Current.User.Identity.IsAuthenticated)
                throw new WebApiException(EnumException.身份验证失败);
        }
    }
}

    public class WebApiIdentity : IIdentity
    {
        public UserDTO Owner { get; set; }

        public string Name { get; set; }

        public string Role { get; set; }

        /// 表示用的验证方式是自定义验证
        public string AuthenticationType
        {
            get { return "Custom"; }
        }

        public bool IsAuthenticated
        {
            get { return true; }
        }
    }

    public static class ApiControlerExtension
    {
        //方便获取用户的扩展方法
        public static UserDTO GetUser(this ApiController controller)
        {
            if (controller.User is WebApiPrincipal)
            {
                return ((WebApiIdentity)controller.User.Identity).Owner;
            }
            else
            {
                return null;
            }
        }
}
时间: 2024-10-27 04:27:58

WebApi身份验证的相关文章

Nginx集群之基于Redis的WebApi身份验证

目录 1       大概思路... 1 2       Nginx集群之基于Redis的WebApi身份验证... 1 3       Redis数据库... 2 4       Visualbox虚拟机ubuntu下的redis部署... 3 5       编写.NET WebApi的OnAuthorization身份验证... 6 6       编写.NET WebApi的ActionFilterAttribute令牌验证... 8 7       编写.NET WebApi的服务端.

Web用户的身份验证及WebApi权限验证流程的设计和实现

前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权限验证来实现Web系统登录,Mvc前端权限校验以及WebApi服务端的访问校验功能. 1. Web Form认证介绍 Web应用的访问方式因为是基于浏览器的Http地址请求,所以需要验证用户身份的合法性.目前常见的方式是Form认证,其处理逻辑描述如下:1. 用户首先要在登录页面输入用户名和密码,然

WebApi 登录身份验证

前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权限验证来实现Web系统登录,Mvc前端权限校验以及WebApi服务端的访问校验功能. 1. Web Form认证介绍 Web应用的访问方式因为是基于浏览器的Http地址请求,所以需要验证用户身份的合法性.目前常见的方式是Form认证,其处理逻辑描述如下:1. 用户首先要在登录页面输入用户名和密码,然

Asp.Net WebApi 集成OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联” 的解决办法

在Asp.Net WebApi 项目中开启OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现如下异常: 出现错误. 没有 OWIN 身份验证管理器与此请求相关联. ExceptionType:System.InvalidOperationException StackTrace: 在 System.Web.Http.Owin.PassiveAuthenticationMessageHandler.Suppress

[置顶] Web用户的身份验证及WebApi权限验证流程的设计和实现

转发 http://blog.csdn.net/besley/article/details/8516894 [置顶] Web用户的身份验证及WebApi权限验证流程的设计和实现 2013-01-18 13:19 22755人阅读 评论(19) 收藏 举报  分类: Asp.net Web技术(9)  WebAPI(3)  MVC(6)  版权声明:本文为博主原创文章,未经博主允许不得转载. 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过

ASP.NET WebAPI 安全与身份验证 基础验证与非对称加密

因为安全需要,又没有申请HTTPS证书 只对密码进行了非对称加密 同时服务端验证了是否有证书 本文参考了: MSDN 13年6月的期刊(启用和自定义 ASP.NET Web API 服务的安全性 ):https://msdn.microsoft.com/zh-cn/magazine/dn201748.aspx 与园子里(C#使用RSA证书文件加密和解密示例):http://www.cnblogs.com/eshizhan/archive/2012/10/07/2713680.html 根据实际使

关于WEB Service&amp;WCF&amp;WebApi实现身份验证之WCF篇(1)

WCF身份验证一般常见的方式有:自定义用户名及密码验证.X509证书验证.ASP.NET成员资格(membership)验证.SOAP Header验证.Windows集成验证.WCF身份验证服务(AuthenticationService),这些验证方式其实网上都有相关的介绍文章,我这里算是一个总结吧,顺便对于一些注意细节进行说明,以便大家能更好的掌握这些知识. 第一种:自定义用户名及密码验证(需要借助X509证书) 由于该验证需要借助于X509证书,所以我们需要先创建一个证书,可以利用MS自

.NET Core WebAPI集成JWT,实现身份验证

前两篇文章给大家介绍了在.NET Core中如何使用Swagger的文章,那今天给大家分享一下JWT 在做接口开发的同学可能都有感受,我的接口如何保护的问题,如果没有身份验证,那不是接口完全暴露在外面,任意使人调用,这显然不是我们想要的一种结果.当然做身份验证的方式有多种,今天给大家讲一种比较流行了,标准的身份验证JWT 什么是JWT? 随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取r

ASP.NET Web API 2基于令牌的身份验证

基于令牌的认证 我们知道WEB网站的身份验证一般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别用户. WEB API使用这样的方法不是很适合,于是就有了基于令牌的认证,使用令牌认证有几个好处:可扩展性.松散耦合.移动终端调用比较简单等等,别人都用上了,你还有理由不用吗? 下面我们花个20分钟的时间来实现一个简单的WEB API token认证: Step 1: 新建一个空的WEB API项目,项目名称就设置为