概述


本文已经同步到《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 中间件实现基本验证的更多相关文章

  1. ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介

    概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware ...

  2. ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介

    概述 ASP.NET Core 1.0是ASP.NET的一个重要的重新设计. 例如,在ASP.NET Core中,使用Middleware编写请求管道. ASP.NET Core中间件对HttpCon ...

  3. Asp.net Vnext Filters

    ASP.NET MVC 提供Filters(筛选器)之前或之后调用操作方法执行筛选逻辑,和AOP面向切面编程一样. 本文已经同步到<Asp.net Vnext 系列教程 >中] 本章主要介 ...

  4. Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建

    最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时 ...

  5. ASP.NET Core 中间件Diagnostics使用

    ASP.NET Core 中间件(Middleware)Diagnostics使用.对于中间件的介绍可以查看之前的文章ASP.NET Core 开发-中间件(Middleware). Diagnost ...

  6. ASP.NET vNext 概述

    兼容Mono的下一代云环境Web开发框架ASP.NET vNext 我们知道了ASP.NET vNext是一个全新的框架,是一个与时俱进的框架.这篇文章将深入讨论在整体架构更多的细节,文档参照 ASP ...

  7. [转]ASP.NET Core 中间件详解及项目实战

    本文转自:http://www.cnblogs.com/savorboard/p/5586229.html 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际 ...

  8. 振奋人心啊!!!!下一代.NET——ASP.NET vNext

    这两天看到的.NET的新闻都好振奋人心啊!微软北美技术大会带来了好多好消息! 看到一篇博客园的文章,感觉太棒了.摘录下来.原文链接:http://news.cnblogs.com/n/208133/ ...

  9. ASP.NET Core中间件实现分布式 Session

    1. ASP.NET Core中间件详解 1.1. 中间件原理 1.1.1. 什么是中间件 1.1.2. 中间件执行过程 1.1.3. 中间件的配置 1.2. 依赖注入中间件 1.3. Cookies ...

随机推荐

  1. 总结: 《jQuery基础教程》 1-4章

    前言: 因为公司的项目用到了jQuery+Bootstrap,而Bootstrap基于jQuery,突然发现自己只是很久前看过jQuery的视频教程,对jQuery的一些API有一些了解,在使用中还是 ...

  2. SMO详解

    转自:简书https://www.jianshu.com/p/55458caf0814 SVM通常用对偶问题来求解,这样的好处有两个:1.变量只有N个(N为训练集中的样本个数),原始问题中的变量数量与 ...

  3. 路径名导致的异常:javax.imageio.IIOException: Can't read input file!

    背景: 写了一个测试程序,目的是读取本地的图片,为其打上水印图片.在使用过程中总会遇到:javax.imageio.IIOException: Can't read input file!的错误,最开 ...

  4. python---基础知识回顾(十)进程和线程(多线程)

    前戏:多线程了解 使用多线程处理技术,可以有效的实现程序并发,优化处理能力.虽然进程也可以在独立的内存空间并发执行,但是生成一个新的进程必须为其分配独立的地址空间,并维护其代码段,堆栈段和数据段等,这 ...

  5. springcloud入门系列(二):注册中心Eureka

    搭建注册中心Eureka 1.pom中依赖 <dependencies> <dependency> <groupId>org.springframework.clo ...

  6. [转载]asp.net mvc: why is Html.CheckBox generating an additional hidden input

    http://stackoverflow.com/questions/2697299/asp-net-mvc-why-is-html-checkbox-generating-an-additional ...

  7. soj1001. Alphacode

    1001. Alphacode Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Alice and Bob need t ...

  8. Jquery Ajax自定义无刷新提交表单Form

    Jquery的$.ajax方法可以实现ajax调用,要设置url,post,参数等. 如果要提交现有Form需要写很多代码,何不直接将Form的提交直接转移到ajax中呢. 以前的处理方法 如Form ...

  9. 天梯赛 L2-024. (并查集) 部落

    题目链接 题目描述 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查 ...

  10. numpy_array与PIL.Image之间的互转

    # conding:utf-8 import matplotlib.pyplot as plt import numpy as np import PIL.Image as image # 图片的读取 ...