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 ...
随机推荐
- K8S调度之节点亲和性
Node Affinity Affinity 翻译成中文是"亲和性",它对应的是 Anti-Affinity,我们翻译成"互斥".这两个词比较形象,可以把 po ...
- NATS_11:NATS集群构建与验证
NATS服务集群化 NATS支持每一个服务按照集群模式方式运行.你可以将这些服务组织在一起形成一个集群来提高服务器的容量的消息传递系统,并可以提升整个系统的弹性话和高可用性. 注意,NATS集群服务器 ...
- P4782 【模板】2-SAT 问题 && 2-SAT问题
2-SAT到图论 \(k-SAT\) 是 k-适应性问题(Satisfiability)的简称. \(k-SAT\) 问题(除 \(k = 2\))已被证明为是 \(NP\) 完全问题, 而对于 \( ...
- [USACO5.3]量取牛奶Milk Measuring
https://daniu.luogu.org/problemnew/show/P2744 滚动数组压去第一维:前i种木桶 f[j] 量取体积j最少需要几种木桶 g[j] 体积j的最优解是否使用了第 ...
- 51 nod 1205 流水线调度
51 nod 1205 流水线调度 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工.每 ...
- [php]php总结(2)
18.数组$arr[null] = 20; //array([]=>20)$arr[] = 20;//默认为下一个下标赋值unset()可以删除数组元素,但不会重建索引array_values( ...
- Linux学习2-fork
复制进程映像 fork() 要想让进程同时执行多个函数,我们可以使用线程或从源程序中创建一个完全分离的进程,后者就像init的做法一样,而不像exec调用那样用新程序替换当前指向的线程. 我们可以通过 ...
- 20155336 2016-2017-2《JAVA程序设计》第五周学习总结
20155336 2016-2017-2<JAVA程序设计>第五周学习总结 教材学习内容总结 第八章 语法与继承构架 使用try.catch 特点: 使用try.catch语法,JVM会尝 ...
- caffe的特殊层
每次写博客都带有一定的目的,在我看来这是一个记录的过程,所以尽量按照循序渐进的顺序逐步写,前面介绍的CNN层应该是非常常用的,这篇博客介绍一下某些特殊的layer,但是由于特殊的layer都带有一定的 ...
- jQuery核心函数——(一)