Asp.net Vnext 中间件实现基本验证
概述
本文已经同步到《Asp.net Vnext 系列教程 》中]
vnext 没有 web.config 可以配置基本验证,本文使用中间件实现基本验证
实现
通过Startup(启动类)Configure 方法加入中间件
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory)
{ app.UseMyMiddleware();
//通过扩展注册中间件
public static class BasicAuthenticationExtensions
{
public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder app)
{
return app.UseMiddleware<BasicAuthentication>();
}
}
//中间件类
public class BasicAuthentication
{
private readonly RequestDelegate next; public BasicAuthentication(RequestDelegate next)
{
this.next = next;
} public async Task Invoke(HttpContext context,
IAuthenticationService authenticationService)
{
try
{
var parser = new BasicAuthenticationParser(context);
var username = parser.GetUsername();
var password = parser.GetPassword(); await authenticationService.AuthenticateAsync(username, password);
await next(context);
}
catch (Exception e)
{
context.Response.StatusCode = ;
context.Response.Headers.Add("WWW-Authenticate",
new[] { "Basic" });
}
}
}
//解析上下文获取 密码 用户名
internal class BasicAuthenticationParser
{
private readonly string credentials; public BasicAuthenticationParser(HttpContext context)
{
credentials = GetCredentials(context);
} public string GetUsername()
{
return GetValue(credentials, );
} public string GetPassword()
{
return GetValue(credentials, );
} private static string GetValue(string credentials, int index)
{
if (string.IsNullOrWhiteSpace(credentials))
return null; var parts = credentials.Split(':');
return parts.Length == ? parts[index] : null;
} private static string GetCredentials(HttpContext context)
{
try
{
string[] authHeader;
if (context.Request.Headers.TryGetValue("Authorization", out authHeader) &&
authHeader.Any() &&
authHeader[].StartsWith("Basic "))
{
var value = Convert.FromBase64String(authHeader[].Split(' ')[]);
return Encoding.UTF8.GetString(value);
} return null;
}
catch
{
return null;
}
}
}
//认证服务接口 public interface IAuthenticationService
{
Task AuthenticateAsync(string username, string password);
}
public class SimpleAuthenticationService : IAuthenticationService
{
public Task AuthenticateAsync(string username, string password)
{
//判读密码
if ("".Equals(username, StringComparison.OrdinalIgnoreCase) &&
"".Equals(password))
{
return Task.FromResult();
} throw new Exception();
}
}
运行效果
Asp.net Vnext 中间件实现基本验证的更多相关文章
- ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware ...
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
概述 ASP.NET Core 1.0是ASP.NET的一个重要的重新设计. 例如,在ASP.NET Core中,使用Middleware编写请求管道. ASP.NET Core中间件对HttpCon ...
- Asp.net Vnext Filters
ASP.NET MVC 提供Filters(筛选器)之前或之后调用操作方法执行筛选逻辑,和AOP面向切面编程一样. 本文已经同步到<Asp.net Vnext 系列教程 >中] 本章主要介 ...
- Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建
最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时 ...
- ASP.NET Core 中间件Diagnostics使用
ASP.NET Core 中间件(Middleware)Diagnostics使用.对于中间件的介绍可以查看之前的文章ASP.NET Core 开发-中间件(Middleware). Diagnost ...
- ASP.NET vNext 概述
兼容Mono的下一代云环境Web开发框架ASP.NET vNext 我们知道了ASP.NET vNext是一个全新的框架,是一个与时俱进的框架.这篇文章将深入讨论在整体架构更多的细节,文档参照 ASP ...
- [转]ASP.NET Core 中间件详解及项目实战
本文转自:http://www.cnblogs.com/savorboard/p/5586229.html 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际 ...
- 振奋人心啊!!!!下一代.NET——ASP.NET vNext
这两天看到的.NET的新闻都好振奋人心啊!微软北美技术大会带来了好多好消息! 看到一篇博客园的文章,感觉太棒了.摘录下来.原文链接:http://news.cnblogs.com/n/208133/ ...
- ASP.NET Core中间件实现分布式 Session
1. ASP.NET Core中间件详解 1.1. 中间件原理 1.1.1. 什么是中间件 1.1.2. 中间件执行过程 1.1.3. 中间件的配置 1.2. 依赖注入中间件 1.3. Cookies ...
随机推荐
- linux命令总结之date命令
命令简介: date 根据给定格式显示日期或设置系统日期时间.print or set the system date and time 指令所在路径:/bin/date 命令语法: date [OP ...
- python的匿名函数 lambda的使用方法详解以及使用案例
1.匿名函数是用lambda这个关键字定义 lambda x:x+1 第一个x代表形参,x+1相当于函数的返回值 #lambda x:x+1 第一个x代表形参,x+1相当于函数的返回值 def ...
- nltk_28Twitter情感分析模型
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...
- 如何使用vuejs过滤器
大家再使用vue做项目时,查询功能当然必不可少,这就得使用vue强大的filter啦.其实vue内置的两个属性filterBy和orderBy已经能满足部分需求了,但是她更大的的魅力在于自定义filt ...
- supervisor自启动
supervisor自启动 其实自启动,也就是在主机开启的时候,执行了sudo supervisord -c /etc/supervisord.conf: 创建/usr/lib/systemd/sys ...
- 算法进阶之Leetcode刷题记录
目录 引言 题目 1.两数之和 题目 解题笔记 7.反转整数 题目 解题笔记 9.回文数 题目 解题笔记 13.罗马数字转整数 题目 解题笔记 14.最长公共前缀 题目 解题笔记 20.有效的括号 题 ...
- 移动端UI
mui:http://dev.dcloud.net.cn/mui/ saltUI:https://salt-ui.github.io
- Postgresql数据库安装中文全文搜索插件zhparser的问题
在PG数据库的基础上加装zhparser中文全文搜索插件,说实话,挺怕这些单独编译安装的插件的,因为安装PG数据库方法的不同,最后可能导致安装的插件各种安装不上,这里说一下我遇到的坑,系统环境是Cen ...
- python初步学习-python模块之 commands
commands 通过 os.popen() 执行 shell 命令,返回两个对象,一个是 状态码(Int).另一个为命令输出(str) commands.getoutput(cmd) 返回命令执行输 ...
- linux服务-ssh
任务目标:ssh登录,scp上传.下载,ssh秘钥登录, 修改ssh server端的端口为8888然后进行登录和scp测试 使用ssh登陆host1 使用scp下载文件 scp root@192.1 ...