在.Net MVC结构API接口中判断http头信息实现公共的权限验证过滤器示例

简介: //control   action public class TestController : ApiController{ [MyAuthFilter] public string test(string str) { return str.

//control   action 

public class TestController : ApiController
{
	[MyAuthFilter]
	public string test(string str)
	{
		return str.Trim();
	}
}


	//过虑器类
    public class MyAuthFilter : ActionFilterAttribute
    {
        const string SecurityKeyName = "MySecurityKey";//http头的name
        public object _EBACLS = new object();
        public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            if (EBPermission == "1")//判断权限
            {
                if (EBACLS == null)
                {
                    lock (_EBACLS)
                    {
                        EBACLS = SetEBACLSData();
                    }
                }
                bool isAuth = false;
                bool isPermission = false;
                EBSecurityData EBSecurityData = null;//自定义对象
                IEnumerable<string> lists;
                if (actionContext.Request.Headers.TryGetValues(SecurityKeyName, out lists))
                {
                    string securityKey = lists.FirstOrDefault();
                    LogUtility.WriteLog(SecurityKeyName + securityKey);//写日志文件
                    try
                    {
                        EBSecurityData = EBSecurityUtility.GetSecurityData(securityKey);//解密得到的加密串
                        LogUtility.WriteLog("EBSecurityData:" + (EBSecurityData != null ? EBSecurityData.ObjectToJson() : ""));
                    }
                    catch (Exception)
                    { }
                    if (EBSecurityData != null && EBSecurityData.Expire > DateTime.Now && EBSecurityData.ProviderId > 0)
                    {
                        GenericIdentity identity = new GenericIdentity(EBSecurityData.ProviderId.ToString(), "Forms");
                        GenericPrincipal principal = new GenericPrincipal(identity, new string[] { });
                        HttpContext.Current.User = principal;
                        isAuth = true;

                        string actionName = actionContext.ActionDescriptor.ActionName.ToLower();
                        string actionNo;
                        EBACLS.TryGetValue(actionName, out actionNo);
                        if (!string.IsNullOrWhiteSpace(EBSecurityData.Acl) && !string.IsNullOrWhiteSpace(actionNo))
                        {
                            string acl = string.Format(",{0},", EBSecurityData.Acl);
                            isPermission = acl.Contains("," + actionNo + ",");
                        }
                    }
                }

                if (!isAuth)
                {
                    throw new BusinessException("登录验证失败", 401);
                }
                else if (!isPermission)
                {
                    throw new BusinessException("未授权", 403);
                }
            }
        }

        public static Dictionary<string, string> EBACLS { get; set; }

        Dictionary<string, string> SetEBACLSData()
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("getorderitemoperaterecords", "01");
            dic.Add("getorderitemchangedetail", "02");
            return dic;
        }
    }


http头请求示例:

User-Agent: Fiddler
Host: localhost
Content-Length: 478
Content-Type: text/json
MySecurityKey: roxnQNJLa0voulfXMcGugvhKJT1njtDV1Hmu67MbGPIU0UlEVmKXjXkPJ5d7dn1HdD%2BPDM%2Fsa9IJn36NksxQE1MdQ8Mqt1JqhvTTvQfG3zhrSFYgMQVAe3AuYcEN%2F9873lIjXXyuK%2FUQ75vJ3kH3bYIZykRmSvR4fPMbxNVWhVHuhO%2BdVJJQDpLS2Pihy1KbjffkcMNYBZJWdPu%2FLzYCIesaLh%2FDC85IOUi9OOdWzaPMjbvPXoBN7ahN%2Fj%2BkmWNJiYBxPPVO3IU%3D


拿到了 MySecurityKey 的值 ,想怎么处理就怎么处理,我这里只是一样示例,有效增加api安全系数。

如果哪个方法很重要,要使用权限,只要在上面加[ MyAuthFilter] 标签,就能实现权限验证,当然,如果不同的方法 ,也可以使用不同的过虑器~自己可以随便定义。

相关文章
|
2月前
|
JSON 搜索推荐 API
抖音商品详情API接口:获取商品信息的指南
抖音商品详情API接口由抖音开放平台提供,允许第三方应用访问抖音小店的商品数据,包括基本信息、价格、库存及用户评价等。其优势在于数据实时性、自动化处理、市场分析及个性化推荐。通过注册账号、获取API密钥、阅读文档和构建请求,用户可高效获取商品信息,提升运营效率。未来,该接口将在电商领域发挥更大作用。
|
3月前
|
JSON API 开发工具
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
|
11天前
|
JSON 数据挖掘 API
电商信息指南:API接口淘宝关键词、店铺所有商品获取
要获取淘宝关键词商品数据和店铺所有商品的API接口,需先注册淘宝开放平台账号并创建应用,获取API密钥。接着,使用密钥获取访问令牌,详细阅读API文档,构造并发送API请求,解析响应数据。特别地,使用`item_search_shop`接口可获取店铺内所有商品信息。
|
24天前
|
JSON 安全 API
抖音店铺商品信息的 API
抖音店铺商品信息的 API 主要用于获取商品的详细信息,包括基本信息、属性、库存、评价、推广信息等。开发者需注册账号、申请权限、阅读文档、发送请求并处理响应。此外,还提供商品搜索和管理接口,帮助商家优化商品展示和管理订单,提高运营效率。使用时需遵守平台规则,确保数据安全和合法性。
|
1月前
|
Prometheus 监控 Cloud Native
调用淘宝 API 时如何处理错误信息?
调用淘宝API时,需熟悉其错误码体系,处理客户端(如参数错误、权限不足)和服务器(如内部错误、网络问题)错误,编写错误处理逻辑,并进行充分测试与监控,确保API调用稳定可靠。
|
12天前
|
编解码 API 数据库
商品详情 API 接口的返回结果通常包含哪些信息?
商品详情API接口返回的信息涵盖多个方面,主要包括商品基本信息(ID、标题、图片、价格、库存、SKU)、详细描述与规格参数、销售与评价信息(销量、好评率、评价内容、促销活动)、物流与售后信息(发货地、运费模板、退换货政策、保修期限)及店铺信息(ID、名称、评分)和关联推荐信息(相似商品、搭配商品)。这些信息有助于用户全面了解商品并做出购买决策。
|
15天前
|
Java 测试技术 API
如何利用 1688 API 接口获取商品信息?
利用 1688 API 获取商品信息的步骤包括:注册开发者账号并创建应用,申请 API 权限,获取 API 密钥,了解 API 文档,编写代码调用 API,并进行测试与调试。最终在生产环境中上线应用,确保合法合规使用。
|
24天前
|
监控 供应链 搜索推荐
获取店铺商品信息的 API 接口有哪些?
本文介绍了五个常用的电商平台获取店铺商品信息的 API 接口:淘宝、京东、1688、拼多多和慢慢买。每个接口的功能、使用方式及优势各不相同,涵盖商品详情、价格、销量、库存等信息,适用于商品分析、竞品分析、价格监控等场景,帮助商家提升业务效率和市场竞争力。
|
2月前
|
XML JSON API
淘宝商品详情API接口:获取商品信息的指南
淘宝详情API接口是淘宝开放平台提供的一种API接口,它允许开发者通过编程方式获取淘宝商品的详细信息。这些信息包括商品的基本属性、价格、库存状态、销售策略、卖家信息等,对于电商分析、市场研究或者商品信息管理等场景非常有用。
108 1
|
3月前
|
存储 API C#
【Azure API 管理】在APIM 中添加 log-to-eventhub 策略,把 Request Body 信息全部记录在Event Hub中
【Azure API 管理】在APIM 中添加 log-to-eventhub 策略,把 Request Body 信息全部记录在Event Hub中