首页 > 编程语言 >C# WebApi - Basic验证实现;

C# WebApi - Basic验证实现;

时间:2023-04-06 11:33:43浏览次数:48  
标签:WebApi Web C# System Basic var using actionContext

1.Filter文件夹下添加如下BasicAuthorizeAttribute 类;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Security;

namespace ABBPMP.WebApi.Filter
{
/// <summary>
/// 自定义此特性用于接口的身份验证
/// </summary>
public class BasicAuthorizeAttribute : AuthorizeAttribute
{
//重写基类的验证方式,加入我们自定义的Ticket验证
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
//从http请求的头里面获取身份验证信息,验证是否是请求发起方的ticket
var authorization = actionContext.Request.Headers.Authorization;
if ((authorization != null) && (authorization.Parameter != null))
{
//解密用户ticket,并校验用户名密码是否匹配
var encryptTicket = authorization.Parameter;
if (ValidateTicket(encryptTicket))
{
base.IsAuthorized(actionContext);
}
else
{
HandleUnauthorizedRequest(actionContext);
}
}
//如果取不到身份验证信息,并且不允许匿名访问,则返回未验证401
else
{
var attributes = actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().OfType<AllowAnonymousAttribute>();
bool isAnonymous = attributes.Any(a => a is AllowAnonymousAttribute);
if (isAnonymous)
base.OnAuthorization(actionContext);
else
HandleUnauthorizedRequest(actionContext);
}
}

//校验用户名密码(正式环境中应该是数据库校验)
private bool ValidateTicket(string encryptTicket)
{
//解密Ticket
var strTicket = Encoding.Default.GetString(Convert.FromBase64String(encryptTicket));
//从Ticket里面获取用户名和密码
var index = strTicket.IndexOf(":");
string strUser = strTicket.Substring(0, index);
string strPwd = strTicket.Substring(index + 1);
if (strUser == "name" && strPwd == "password")
{
return true;
}
else
{
return false;
}
}
}
}

 2.WebApi添加以上字段属性(可以整个类添加,也可以只加在对应的方法上)

[BasicAuthorizeAttribute]
public class PlanController : BaseApiController

{

......

}

3.WebApi调用

public static void APITest()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:4765/");
var url = $"api/xxx/xxx?so=12312345&ci=1000";

AuthenticationHeaderValue authentication = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"name:password")));
client.DefaultRequestHeaders.Authorization = authentication;

var resultStr = client.GetAsync(url).Result.Content.ReadAsStringAsync().Result;
if (resultStr != null)
{
//var result = JsonConvert.DeserializeObject<Models.ResultModel>(resultStr);
}
return;
}

 

标签:WebApi,Web,C#,System,Basic,var,using,actionContext
From: https://www.cnblogs.com/jxw-29/p/17292226.html

相关文章

  • 8-springcloud-eureka-4-向Eureka服务注册中心注册服务
    eureka-server就是我们自己开发的module,是eureka的服务端,扮演注册中心的角色;eureka-client就是我们自己开的微服务module,向eureka-server注册中心注册服务;前面搭建了服务提供者项目,接下来我们就可以将该服务提供者注册到Eureke注册中心,步骤如下:demo1-provider项目中操作1、在......
  • socks5的两种验证方法
    Socks5协议支持两种类型的验证方法:无验证(NoAuthentication)和用户名密码验证(Username/PasswordAuthentication)。1、无验证(NoAuthentication):在此方法中,Socks5客户端与Socks5服务器建立连接后,客户端发送一个不带验证信息的请求,直接进行连接。这种方式比较简单,但是缺乏安全性,因为任......
  • 无备份情况下恢复MySQL truncate table
    近期陆续有客户遇到MySQL的数据库问题,最近正好开始研究MySQL的一些技术。大家都知道我之前是擅长Oracle恢复,如果不会MySQL数据库恢复,总感觉却少一点什么。既然如此,就顺道研究一下吧。幸运的是,Google能够发现一些针对MySQL的恢复文章以及一些工具。我们都知道,MySQLServer都很多存......
  • echart折线图,柱状图,饼图设置颜色
    之前在做报表的时候用过echart用完也就完了,而这次在用的时候已经忘了,所以这里简单记录一下,好记性不如烂笔头!!!1、折线图修改颜色:1.xAxis:{2.'category',3.false,4.'年龄','20岁以下','30岁','40岁','50岁','60岁','60岁以上']5.},......
  • PAT Basic 1071. 小赌怡情
    PATBasic1071.小赌怡情1.题目描述:常言道“小赌怡情”。这是一个很简单的小游戏:首先由计算机给出第一个整数;然后玩家下注赌第二个整数将会比第一个数大还是小;玩家下注t个筹码后,计算机给出第二个数。若玩家猜对了,则系统奖励玩家t个筹码;否则扣除玩家t个筹码。注意:玩家下......
  • VSCode更改插件安装位置
    1、使用–extensions-dir命令使用命令行打开VSCode,增加参数–extensions-dir插件路径这种方式存在弊端,就是命令行窗口不能关闭。当然也可以增加一个.bat文件打开编辑器。2、使用–extensions-dir命令如果不在安装目录里面创建data目录,那么vscode默认是在C:\Users\dell.vscode......
  • 高Cache命中率的矩阵乘法
    #include<ctime>#include<iostream>usingnamespacestd;intmain(intargc,char**argv){intN=500;intA[N][N];intB[N][N];doubleC1[N][N];doubleC2[N][N];for(inti=0;i<N;i++){for(intj=0;j......
  • PyCharm解决Git冲突
    技术背景在前面的一篇博客中,我们介绍了Fork到自己名下的本地仓库如何与远程原始仓库创建链接的方法。在这篇文章中,我们将要讲解如何应对在这种异步开发的过程中经常有可能会遇到的Git冲突问题,在Pycharm这个专业的Python开发工具中集成了一些处理Git冲突的工具,让我们一起来看看如......
  • C# ActiveMQ使用demo
    安装流程在上一篇引入包在nuget中下载安装Apache.NMS.ActiveMQ如图收发都要 引入usingApache.NMS;usingApache.NMS.ActiveMQ;发信方IConnectionFactoryfactory=newConnectionFactory("tcp://localhost:61616");//创建连接using(IC......
  • 深度学习—ResNet_CIFAR100代码
        1'''2参考资料:PyTorch官方文档3'''45#导入所需的包6importtorch7importwandb8importtorch.nnasnn9fromtorchvisionimporttransforms10fromtorchvision.datasetsimportCIFAR10011fromtorch......