ASP.NET MVC WebApi接口授权验证
对于很任何多开发者来说,不管是使用任何一种框架,或者是使用任何一种语言,都要使用面向接口编程。使用面向接口编程的时候,那么就会有很多的权限验证,用户验证等等。
特别是对于一些系统来说,别人想要对接你的系统,同步系统数据,那么就必须要提供对外访问接口。当然,这对外接口也不是随随便便就提供的,对于一些机密数据,那么对于别人想要使用你的数据,那么必须按照一个标准来。我系统对外提供接口,想要用这个接口必须要通过身份认证才行。举个很简单的例子:你想去我家,你必须经过我的同意和我给你的钥匙你才可以进去。在程序中,接口也是这个道理。有的接口也要通过身份认证,专业一点的说法就是token验证。
最近几天,我就遇到了要写对外接口给别人的一个任务,使用的开发语言是C#,不管使用的是任何语言,实现的原理都是一样的。在ASP.NET MVC 上,webapi是用来写接口最佳利器。
接下来是我写了一个简单的接口授权验证的实例。
public class AuthFilterAttribute : Attribute, IAuthenticationFilter
{
/// <summary>
/// AllowMultiple
/// </summary>
public bool AllowMultiple => true;
/// <summary>
/// 登录授权验证
/// </summary>
/// <param name="context"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
{
try
{
var authHeader = context.Request.Headers.Authorization; if (authHeader != null && authHeader.Scheme == TokenAuthentication.Scheme)
{
var Parameter = authHeader.Parameter;
if (!string.IsNullOrEmpty(Parameter) && Parameter != "null" && Parameter != "undefined")
{
var x = TokenAuthentication.DecryptUserInfo(Parameter);
//用户名登录验证
bool result = xx类.xxx方法(x.UserName, x.secretKey);//这里是验证接口用户的地方,token是放在请求头里面里面用加密方式转过了的 if (result)
{
// 接口用户已授权认证通过 这里是对webapi里面的接口方法进行授权验证,后台控制用户只能访问接口中指定的接口方法。
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, x.secretKey));
var data = JsonConvert.SerializeObject(sp_portuserjurisdictionbll.AuthorizeList(x.secretKey));
JArray jObject = JArray.Parse(data);
foreach (JObject jProperty in jObject)
{
//添加接口方法权限
claims.Add(new Claim(ClaimTypes.Role, jProperty["authorizename"].ToString()));
}
var token = new ClaimsIdentity(claims, TokenAuthentication.Scheme);
context.Principal = new ClaimsPrincipal(new ClaimsIdentity[] { token });
}
}
} }
catch (Exception e)
{
throw e;
}
return Task.FromResult(0);
} /// <summary>
/// 质询
/// </summary>
/// <param name="context"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken)
{
return Task.FromResult(0);
}
}
接下来就是把验证放到webapi控制器里面了
[AuthFilter]//用户验证 这个就是什么的接口用户验证
[RoutePrefix("api/xxxx")]
public class xxxController : ApiController
{
/// <summary>
/// 查询学生基本信息接口
/// </summary>
/// <param name="model">查询参数实体</param>
/// <returns></returns>
[HttpGet]
[Authorize(Roles = "StudentTable-GetStudengMessage")] //接口授权验证 claims 里面包含了"StudentTable-GetStudengMessage"这个的值,那么这个接口方法就可以调用
[Route("")]
public 学生信息实体 FindStudent([FromUri] Parameter model) {
return xxx.FindStudent(model.name, model.age);
}
}
忘了一件事情
一定要在webapiconfig.cs Register 方法里面加上 接口身份认证筛选器
// 身份认证筛选器。
config.Filters.Add(new AuthFilterAttribute()); //刚刚写好的接口认证类
一个简单的接口身份认证,接口方法访问权限就已经做好了。
ASP.NET MVC WebApi接口授权验证的更多相关文章
- ASP.NET Core WebApi基于JWT实现接口授权验证
一.ASP.Net Core WebApi JWT课程前言 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再 ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...
- 七天学会ASP.NET MVC (四)——用户授权认证问题
小编应各位的要求,快马加鞭,马不停蹄的终于:七天学会 Asp.Net MVC 第四篇出炉,在第四天的学习中,我们主要了学习如何在MVC中如何实现认证授权等问题,本节主要讲了验证错误时的错误值,客户端验 ...
- ASP.NET MVC学习之模型验证篇
一.学习前的一句话 在这里要先感谢那些能够点开我随笔的博友们.慢慢的已经在博客园中度过一年半了,伊始只是将博客园作为自己学习的记录本一样使用,也不敢将自己的随笔发表到博客园首页,生怕自己的技艺不高,反 ...
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...
- .net异步性能测试(包括ASP.NET MVC WebAPI异步方法)
很久没有写博客了,今年做的产品公司这两天刚刚开了发布会,稍微清闲下来,想想我们做的产品还有没有性能优化空间,于是想到了.Net的异步可以优化性能,但到底能够提升多大的比例呢?恰好有一个朋友正在做各种语 ...
- 【ASP.NET MVC系列】数据验证和注解
[01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP. ...
- ASP.NET MVC学习之模型验证详解
ASP.NET MVC学习之模型验证篇 2014-05-28 11:36 by y-z-f, 6722 阅读, 13 评论, 收藏, 编辑 一.学习前的一句话 在这里要先感谢那些能够点开我随笔的博友们 ...
- 案例:1 Ionic Framework+AngularJS+ASP.NET MVC WebApi Jsonp 移动开发
落叶的庭院扫的一干二净之后,还要轻轻把树摇一下,抖落几片叶子,这才是Wabi Sabi的境界. 介绍:Ionic是移动框架,angularjs这就不用说了,ASP.Net MVC WebApi提供数据 ...
随机推荐
- python cx_Oracle模块的安装和使用
$wget http://download.oracle.com/otn/linux/instantclient/10204/basic-10.2.0.4.0-linux-x86_64.zip 3 ...
- OD 实验(二十) - 对反调试程序的逆向分析(一)
程序: Keyfile.dat 里的内容 该文件中要至少有 9 个 ReverseMe.A: 运行程序 用 OD 打开该程序,运行 弹出的是错误的对话框 该程序发现 OD 对它的调试,所以该程序对 O ...
- 华为交换机S5700设置远程ssh telnet登录
AAA是指:authentication(认证).authorization(授权).accounting(计费)的简称,是网络安全的一种管理机制:Authentication是本地认证/授权,aut ...
- svn删除
[本地删除.然后提交到服务器]与[服务器删除然后本地更新] svn delete svn://路径(目录或文件的全路径) -m “删除备注信息文本” 推荐如下操作: svn delete 文件名 sv ...
- Python 小知识点(10)--异常结构记录
try: print("try中") except KeyError as e: # 异常时,执行该块 print("异常中") else: # 主代码块(tr ...
- 【Oracle】安装Oracle 10gR2 For CentOS
Oracle10gR2安装安装环境项目 版本信息 备注操作系统 CentOS5.364bit Oracle数据库 Oracle10.2.0.4 64bit 硬件信 ...
- Python实践练习:电话号码和 E-mail 地址提取程序
题目: 假设你有一个无聊的任务,要在一篇长的网页或文章中,找出所有电话号码和邮件地址.如果手动翻页,可能需要查找很长时间.如果有一个程序,可以在剪贴板的文本中查找电话号码和 E-mail 地址,那你就 ...
- C# HTTP请求GET,POST
转自原文 [C#]HTTP请求GET,POST HTTP定义了与服务器交互的不同方法,基本方法有GET,POST,PUT,DELETE,分别对于查,该,增,删.一般情况下我们只用到GET和POST,其 ...
- tornado 之 异步非阻塞
异步非阻塞 1.基本使用 装饰器 + Future 从而实现Tornado的异步非阻塞 import tornado.web import tornado.ioloop from tornado im ...
- java 控制台 输入字符串
import java.util.Scanner; //导入输入类 public static void main(String[] args) { //创建输入对象 Scanner s ...