aspnetcore 认证相关类简要说明一
首先我想要简要说明是AuthenticationScheme类,每次看到Scheme这个单词我就感觉它是一个很高大上的单词,其实简单翻译过来就是认证方案的意思。既然一种方案,那我们就要知道这个方案的名字(Name)和它对外宣传的名字(DisplayName)以及这方案的认证处理类型(Type handlerType)。
namespace Microsoft.AspNetCore.Authentication
{
public class AuthenticationScheme
{
public AuthenticationScheme(string name, string displayName, Type handlerType);
//The name of the authentication scheme.
public string Name { get; }
//The display name for the scheme. Null is valid and used for non user facing schemes.
public string DisplayName { get; }
//The Microsoft.AspNetCore.Authentication.IAuthenticationHandler type that handles this scheme.
public Type HandlerType { get; }
}
}
aspnetcore同时还提供了一个构建AuthenticationScheme类的AuthenticationSchemeBuilder类。AuthenticationSchemeBuilder的属性和AuthenticationScheme是一样的,这些属性将作为实例化AuthenticationScheme类的参数。AuthenticationSchemeBuilder仅比AuthenticationScheme多了一个Build方法。
namespace Microsoft.AspNetCore.Authentication
{
/// <summary>
/// Used to build <see cref="AuthenticationScheme"/>s.
/// </summary>
public class AuthenticationSchemeBuilder
{
/// <summary>
/// Constructor.
/// </summary>
/// <param name="name">The name of the scheme being built.</param>
public AuthenticationSchemeBuilder(string name)
{
Name = name;
}
...
//一些和AuthenticationScheme类相同的属性,将作为构建AuthenticationScheme的参数
...
// Builds the <see cref="AuthenticationScheme"/> instance.
public AuthenticationScheme Build() => new AuthenticationScheme(Name, DisplayName, HandlerType);
}
}
而AuthenticationSchemeBuilder又在那里注册进来的呢?接下来我们看另外一个类:AuthenticationOptions
public class AuthenticationOptions
{
public AuthenticationOptions();
public IEnumerable<AuthenticationSchemeBuilder> Schemes { get; }
public IDictionary<string, AuthenticationSchemeBuilder> SchemeMap { get; }
public string DefaultScheme { get; set; }
public string DefaultAuthenticateScheme { get; set; }
public string DefaultSignInScheme { get; set; }
public string DefaultSignOutScheme { get; set; }
public string DefaultChallengeScheme { get; set; }
public string DefaultForbidScheme { get; set; }
public void AddScheme(string name, Action<AuthenticationSchemeBuilder> configureBuilder);
public void AddScheme<THandler>(string name, string displayName) where THandler : IAuthenticationHandler;
}
}
该类的主要作用就是让我们配置AuthenticationScheme的一些选项。
我们可以通过该类的AddScheme和AddScheme<THandler>方法添加方案到AuthenticationOptions类Schemes和SchemeMap属性中。属性SchemeMap是一个字典类型,它是以我们AuthenticationScheme的Name属性作为Key。aspnetcore默认提供了几个方案就不一 一列具了,还有一点我们需要注意的是AddScheme<THandler>中THandler必须是IAuthenticationHandler接口类型。我们可以通过在Startup类的ConfigureServices方法中注入我们的方案:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(x =>
{
x.AddScheme<MyAuth>("abc", "我的中国方案");
});
}
MyAuth是我自己实现IAuthenticationHandler接口添加的类,认证相关的逻辑就实现在他们的方法中,代码如下:
public class MyAuth : IAuthenticationHandler
{
public Task<AuthenticateResult> AuthenticateAsync()
{
throw new NotImplementedException();
} public Task ChallengeAsync(AuthenticationProperties properties)
{
throw new NotImplementedException();
} public Task ForbidAsync(AuthenticationProperties properties)
{
throw new NotImplementedException();
} public Task InitializeAsync(AuthenticationScheme scheme, HttpContext context)
{
throw new NotImplementedException();
}
}
通过以上的短篇小论,我们主要梳理了AuthenticationScheme、AuthenticationSchemeBuilder和AuthenticationOptions三个类。
aspnetcore 认证相关类简要说明一的更多相关文章
- aspnetcore 认证相关类简要说明二
能过<aspnetcore 认证相关类简要说明一>我们已经了解如何将AuthenticationOptions注入到我们依赖注入系统.接下来,我们将了解一下IAuthenticationS ...
- aspnetcore 认证相关类简要说明三
今天我们再来了解一个很重要的接口IAuthenticationService的实现类AuthenticationService: public class AuthenticationService ...
- Android随笔之——Android时间、日期相关类和方法
今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...
- 21 BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类
21_BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类 BasicTaskScheduler基本任务调度器 BasicTaskScheduler基 ...
- 8 延时队列相关类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 4 Handler相关类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. Handler相关类概述 处理程序相关类一共有三个,其没有派生继承关系,但是其有友元关系和使用关系 ...
- MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
前面讲了模态对话框和非模态对话框,本节来将一种特殊的对话框--属性页对话框. 属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面 ...
- android 6.0 SDK中删除HttpClient的相关类的解决方法
一.出现的情况 在eclipse或 android studio开发, 设置android SDK的编译版本为23时,且使用了httpClient相关类的库项目:如android-async-http ...
- Android 6.0删除Apache HttpClient相关类的解决方法
相应的官方文档如下: 上面文档的大致意思是,在Android 6.0(API 23)中,Google已经移除了Apache HttpClient相关的类,推荐使用HttpUrlConnection. ...
随机推荐
- SPSS学习系列之SPSS Statistics(简称SPSS)是什么?
不多说,直接上干货! IBM SPSS Statistics 为业务经理和分析人员提供解决基本业务和研究问题所需的核心统计过程.该软件提供的工具使用户能够快速查看数据.为其他测试拟定假设情况.执行澄清 ...
- 001-Servlet模板
package ${enclosing_package}; import java.io.IOException; import javax.servlet.ServletException; imp ...
- Java PrepareStatement
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement 对象.在对数据库只执行一次性存取的时侯,用 Statement 对象 ...
- 端口扫描工具nmap
nmap 使用介绍 nmap是目前为止最广为使用的国外端口扫描工具之一.我们可以从[url]http://www.insecure.org/[/url]进行下载,可以很容易的安装到Windows和un ...
- jquery 获取 tagName(JQuery如何得到tagName?)
在javascript中要取得tagName十分简单,但在jQuery中官方文档却没有记载,在一通百度和谷歌之后,尝试了不少所谓秘技,都不能正确得到,经过自己的验证,终于找到了方法,于是记录下来以备忘 ...
- golang代码片段(摘抄)
以下是从golang并发编程实战2中摘抄过来的代码片段,主要是实现一个简单的tcp socket通讯(客户端发送一个数字,服务端计算该数字的立方根然后返回),写的不错,用到了go的并发以及看下郝林大神 ...
- VS2013漂亮字体
使用字体:Fixedsys Excelsior 3.011.首先下载字体:http://www.fixedsysexcelsior.com/ 2.安装字体:控制面板 -> 字体,复制下载的文件进 ...
- centos 6.X系统里的网卡em1还原为eth0
公司的DELL R720服务器安装完centos 6.5版本后,发现原先熟悉的eth0.eth1变成了em1.em2 . 本来认为只是接口名称变化,并不伤大雅 .不过在放到机房之前进行LVS测试时,发 ...
- 赶集网mysql开发36军规
赶集网mysql开发36军规 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒过. (一)核心军规 (1)不在数据库做运算:cpu计算务必移至业务层 (2)控 ...
- 解决:启动项目报错 java.lang.UnsatisfiedLinkError: D:\Java\apache-tomcat-8.0.17\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
启动项目报错如下: java.lang.UnsatisfiedLinkError: D:\Java\apache-tomcat-8.0.17\bin\tcnative-1.dll: Can't loa ...