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. ...
随机推荐
- javascript中操作元素属性
1. setAttribute():设置属性的值: getAttribute():得到属性的值: removeAttribute():移除属性: 2.offsetWidth:offsetWidth = ...
- java_Proxy动态代理_AOP
讲了JDK里使用Proxy动态代理的机制,详细过程. 切面类TransactionHandler需要实现InvocationHaandler接口,实现它的invoke方法. 项目目录: User类代码 ...
- 命令行下 初识 redis 入门教程
1. redis-cli 命令行进入redis set,get, setex,给键值设置过期时间 setex name 10 DOG //设置name键 为 DOG 10秒后过期. setnx,判断值 ...
- 【分步详解】两个有序数组中的中位数和Top K问题
(这也是一道leetcode的经典题目:<LeetCode>解题笔记:004. Median of Two Sorted Arrays[H] 问题介绍 这是个超级超级经典的分治算法!!这个 ...
- 2018最新win10 安装tensorflow1.4(GPU/CPU)+cuda8.0+cudnn8.0-v6 + keras 安装CUDA失败 导入tensorflow失败报错问题解决
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9747019.html 基本开发环境搭建 1. Microsoft Windows 版本 关于W ...
- springboot-20-全局异常处理
springboot的全局异常处理 . 新建一个类GlobalDefaultExceptionHandler 在class上注解 @ControllerAdvice 方法上注解 @ExceptionH ...
- 远程服务通讯Service(Remote--AIDL)
服务端代码:https://github.com/maogefff/AndroidTest/tree/develop-ServiceLocal2 客户端代码:https://github.com/ma ...
- 常用工具说明--mongodb、mysql解压版、IDEA配置maven
Mongodb的安装.配置 1.去官网下载mongodb安装包,mongodb官网.点击右上角的 Download,下载对应的msi安装包 2.安装程序,选择 Custom,自定义安装路径,比如安装在 ...
- 【angular5项目积累总结】自定义管道 OrderBy
import { Injectable, Pipe } from '@angular/core'; @Pipe({ name: 'orderBy' }) @Injectable() export cl ...
- webstorm中es6语法报错,.vue文件中es6语法报错
1.webstorm中es6语法报错,解决方法: 打开 Settings => Languages & Frameworks => Javascript把 Javascript L ...