net6授权认证源码详解(一)

本文详细探讨了ASP.NET Core中的认证过程,重点剖析了使用JWT进行身份验证的方法,包括AuthenticationHandler、AuthenticationSchemeProvider和JwtBearerOptions配置。通过源码解析,揭示了从注册到验证的完整流程。

认证

前期基础知识:

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。

下一节继续介绍剩余认证内容。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王柏龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值