新闻资讯
金沙巴黎人娱乐网不同的分层或者在不同的形式之中-金沙巴黎人娱乐城 jīn shā bā lí rén yú lè chéng
配景
任何一个系统,齐需要关于底层访谒的页面和接口进行安全的处理,其中中枢即是认证和授权。
另外一个问题即是在本色编程经过中,咱们的代码有不同的模式,不同的分层或者在不同的形式之中,如安在不同的所在取得用户信息,超过是业务系统,证据操作员的id来处理不同的业务权限逻辑,这是许多业务期骗所顺心的。
微软在不同的版块齐有各自的竣事,当今以>= .net6的版块为准。
基本主张
这里所说的基本主张,是微软框架下的时期主张,关于一些通识的主张,比如以下内容,假设对这些齐是纯熟的,
还有关于基本的微软时期主张,也假设世界齐是纯熟的,比如 管谈,超过是httpcontext的属性
.net 授权
.net 提供了或者授权、基于扮装的授权、基于战略的授权,各样的授权状貌在通过或者的Attribute修饰就能夸口大部分期骗场景。授权中进军的两个Attribute即是AuthorizeAttribute和AllowAnonymousAttribute,扫数的授权成就齐离不开这两个Attribute。同期,.net 对授权决议的推广也颠倒简单,在本节的临了会先容怎样自界说授权处理武艺来竣事自界说授权逻辑。授权有这三种类型或者授权:只好登录就能访谒,在Controller或者Action上加个[Authorize]就行基于扮装的授权:特定扮装能访谒基于战略的授权:顾名念念义基于扮装的授权.
app.UseAuthentication()
services.AddAuthentication(options =>) 淌若需要个性化,不错在这里张开,一些合手法,比如 DefaultAuthenticateScheme DefaultChallengeScheme AddJwtBearer Token个性化考证参数AuthenticationService, AuthenticationHandlerProvider, AuthenticationSchemeProvider 是的,是通过这三个奇迹,中枢是 AuthenticationMiddleware 逻辑齐在这内部 Scheme 即是用什么规范合手法认证,比如用jwt,bearer, 不同的scheme,就有不同的options,就有不同的handler
是以中枢即是使用或者重载这些内容
httpcontext.user
publicabstract System.Security.Claims.ClaimsPrincipal User 这是规范界说
身份认证通事后,身份认证处理武艺会复返身份认证票根,即AuthenticationTicket。
AuthenticationTicket是ASP.NET Core封装认证信息的类。
AuthenticationTicket又包含了ClaimsPrincipal,ClaimsPrincipal不错厚实为用户主体,由一组ClaimIdentity构成。
ClaimsIdentity不错厚实为身份阐发,一个用户主体不错有多个身份阐发,就好比身份证、驾驶证齐不错代表唯独具体的东谈主相同。
ClaimsIdentity包含了一组Claim,Claim即是好比身份证上的姓名、性别、籍贯等信息。一个用户通过身份认证后,就会用以上类来组织用户信息。后续的授权等其他中间件就不错使用这些信息来进行功能筹画。
结构示举例下:
AuthenticationTicket (身份认证票根,其中封装了认证信息)
ClaimsPrincipal (用户主体) ClaimIdentity (身份阐发) ClaimClaimClaimClaimIdentityClaimIdentity
IHttpContextAccessor
咱们知谈当恳求通过认证模块时,会给刻下的HttpContext赋予刻下用户身份象征,咱们在需要授权的章程器中打上[Authorize]授权标签,就不错在ControllerBase的User属性得到到基于声明的权限象征(ClaimsPrincipal)。
缺憾的是这仅仅针对Controller层面,许多场景下咱们是需要在Service层乃至数据层获径直使用用户信息,这种情况咱们就使用不了User了。
惩处宗旨即是通过这个接口来注入一个奇迹,在业务层面来拉取用户干系信息。不错在登录的时辰把userid写进来,另外即是通过token为key,使用redis存放用户信息。
竣事基本念念路
使用微软安全框架
使用微软数据库一套builder.Services.AddIdentity<ApplicationUser, ApplicationRole> 构建我方个性化身份 public partial class ApplicationUser : IdentityUser
namespace Microsoft.AspNetCore.Identity;
/// <summary>
/// The default implementation of <see cref="IdentityUser{TKey}"/> which uses a string as a primary key.
/// </summary>
public class IdentityUser : IdentityUser<string>
public abstract class AuthenticationStateProvider ApplicationAuthenticationStateProvider 我方竣事微软的认证,builder.Services.AddScoped<AuthenticationStateProvider, ApplicationAuthenticationStateProvider>();
基于类库个性化认证和授权
走漏了逻辑,背面即是膂力活了,不外有一坨的职责要作念,需要用户表,期骗表,扮装表等等
Services.ConfigureOptions<ConfigureJwtBearerOptions>();
Services.ConfigureOptions<ValidateIdentityTokenOptions>();
var authBuilder = Services
.AddAuthentication(MultiScheme)
.AddPolicyScheme(MultiScheme, MultiScheme, options =>
{
options.ForwardDefaultSelector = context =>
{
return context.Request.Headers.Authorization.Any(x => x!.Contains(ApiKeyDefaults.AuthenticationScheme))
? ApiKeyDefaults.AuthenticationScheme
: JwtBearerDefaults.AuthenticationScheme;
};
})
.AddJwtBearer();
_configureApiKeyAuthorization(authBuilder);
Services.AddSingleton<IAuthorizationHandler, yourhandler>();
Services.AddSingleton<IAuthorizationHandler, yourhandler>();
Services.AddSingleton(ApiKeyProviderType);
Services.AddSingleton<IApiKeyProvider>(sp => (IApiKeyProvider)sp.GetRequiredService(ApiKeyProviderType));
Services.AddAuthorization(options => options.AddPolicy(IdentityPolicyNames.SecurityRoot, policy => policy.AddRequirements(new ())));
这是最终齐要有的,围绕这些内容张开。
扫数这个词形式挺多,就不张开细节了金沙巴黎人娱乐网,代码是.net 7 .net8 环境下跑的。