认证
前期基础知识:
Claims:声明(证件单元),一个键值对;
Identity:身份,类似于个人身份证,证明其身份,在apsnetcore中为ClaimsIdentity,其中AuthenticationType用于标识证件的载体类型(比如是身份证是用纸质复印件、还是电子证件、或是实体卡片式证件);
Principal:当事人,在apsnetcore中为ClaimsPrincipal,包括主要身份和多个其他身份信息;
Authentication :认证;
Authorization:授权。
首先,先讲认证知识,话不多说,直接进入源码学习查看。
app.UseAuthentication();进入源码,路径(aspnetcore/src/Security/Authentication/Core/src/AuthAppBuilderExtensions.cs)




具体操作:
1、获取IAuthenticationRequestHandle子类Authenticationhandler,调用InitializeAsync初始化,然后调用handleReuestAsync。
2、获取默认AuthenticationScheme(例如下面"Bearer"对应的AuthenticationScheme),然后调用IAuthencticationService.AuthenticateAsync,如果成功,记录User信息。
看完处理代码,我们回过头,看下认证注册代码情况。先以JWT为思路进行查看。
调用代码如下:
builder.Services.AddAuthentication("Bearer").AddJwtBearer("Bearer", options => {
options.Authority = "http://localhost:5100";
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters { ValidateAudience = false };
options.RequireHttpsMetadata = false;
});
看下AddAuthentication("Bearer")注册详情,目的是:设置AuthenticationOptions中DefaultScheme为"Bearer",和AddAuthentication()。路径(aspnetcore/src/Security/Authentication/Core/src/AuthenticationServiceCollectionExtensions.cs)

继续查看services.AddAuthenticationCore(),路径(aspnetcore/src/Http/Authentication.Core/src/AuthenticationCoreServiceCollectionExtensions.cs)

这里重点关注两个类,AuthenticationSchemeProvider和AuthenticationHandlerProvider。
AuthenticationSchemeProvider 中用到的操作如下:
1、

GetDefaultAuthenticateSchemeAsync()->GetDefaultSchemeAsync()->GetSchemeAsync("XXX")
这里"XXX"即为代码段"AddAuthentication("Bearer")"中的"Bearer"。GetSchemeAsync的作用是有没有默认值,有则返回"Bearer"对应的AuthenticationScheme,无则返回null。
2、
GetRequestHandlerSchemesAsync()返回AuthenticationScheme中HandlerType继承IAuthenticationRequestHandler的AuthenticationScheme列表。
3、
GetSchemeAsync(_schemes.ContainsKey(name) ? _schemes[name] : null),存在返回AuthenticationScheme,不存在返回null。
AuthenticationHandlerProvider 中用到的操作如下:


GetHandlerAsync()获取schema的HandleType类型,并且创建实例(JwtBearerHandle),然后调用初始化方法,完成初始化操作。
继续查看services.AddJwtBearer("Bearer",options=>{}),主要是用来对JwtBearerOptions配置项进行配置工作。路径
(aspnetcore/src/Security/Authentication/JwtBearer/src/JwtBearerExtensions.cs)。




下面是具体Services.Configure<AuthenticationOptions>(o=>{})具体配置内容,路径(runtime/src/libraries/Microsoft.Extensions.Options/src/OptionsServiceCollectionExtensions.cs)


配置选项,AuthenticationOptions(内包含Schemes->AuthenticationSchemeBuilder->AuthenticationScheme)。
AddOptions:创建了一个OptionsBuilder对象,然后调用它重载方法Configure<TService...>去创建具有多个泛型的ConfigureNamedOptions对象。

通过services.AddJwtBearer("Bearer",options=>{})中options=>{}对JwtBearerOptions进行配置,并且设置Validate验证规则。JwtBearerHandler配置为name为"Bearer"的AuthenticationScheme的HandlerType。
下一节继续介绍剩余认证内容。。。
本文详细探讨了ASP.NET Core中的认证过程,重点剖析了使用JWT进行身份验证的方法,包括AuthenticationHandler、AuthenticationSchemeProvider和JwtBearerOptions配置。通过源码解析,揭示了从注册到验证的完整流程。
828

被折叠的 条评论
为什么被折叠?



