首页 > 其他分享 >Httpcontext.signIn() 执行了什么?

Httpcontext.signIn() 执行了什么?

时间:2023-04-07 23:56:36浏览次数:54  
标签:执行 authenticationScheme signIn handler context services Httpcontext scheme strin

asp.netcore 登录的时候可以写 Httpcontext.signIn(user) ;

这个方法,如果用cookie 最后会些写cookie信息到Httpcontext.respones 中。 定义

public static Task SignInAsync(this HttpContext context, string? scheme, ClaimsPrincipal principal, AuthenticationProperties? properties) =>context.RequestServices.GetService<IAuthenticationService>.SignInAsync(context, scheme, principal, properties);
IAuthenticationService 来自 AuthenticationService
public static IServiceCollection AddAuthenticationCore(this IServiceCollection services)
    {
        services.TryAddScoped<IAuthenticationService, AuthenticationService>();
        services.TryAddSingleton<IClaimsTransformation, NoopClaimsTransformation>(); // Can be replaced with scoped ones that use DbContext
        services.TryAddScoped<IAuthenticationHandlerProvider, AuthenticationHandlerProvider>();
        services.TryAddSingleton<IAuthenticationSchemeProvider, AuthenticationSchemeProvider>();
        return services;
    }
AuthenticationService.SignInAsync() 会根据schema从 AuthenticationHandlerProvider找handler, 
public async Task<IAuthenticationHandler?> GetHandlerAsync(HttpContext context, string authenticationScheme)
    {var scheme = await Schemes.GetSchemeAsync(authenticationScheme);var handler = (context.RequestServices.GetService(scheme.HandlerType) ??
            ActivatorUtilities.CreateInstance(context.RequestServices, scheme.HandlerType))
            as IAuthenticationHandler;
        if (handler != null)
        {
            await handler.InitializeAsync(scheme, context);
            _handlerMap[authenticationScheme] = handler;
        }
        return handler;
    }

在addcookie 的时候,AddScheme会添加scheme.HandlerType

    public static AuthenticationBuilder AddCookie(this AuthenticationBuilder builder, string authenticationScheme, string? displayName, Action<CookieAuthenticationOptions> configureOptions)
    {
        builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IPostConfigureOptions<CookieAuthenticationOptions>, PostConfigureCookieAuthenticationOptions>());
        builder.Services.AddOptions<CookieAuthenticationOptions>(authenticationScheme).Validate(o => o.Cookie.Expiration == null, "Cookie.Expiration is ignored, use ExpireTimeSpan instead.");
        return builder.AddScheme<CookieAuthenticationOptions, CookieAuthenticationHandler>(authenticationScheme, displayName, configureOptions);
    }

 


 

标签:执行,authenticationScheme,signIn,handler,context,services,Httpcontext,scheme,strin
From: https://www.cnblogs.com/qgbo/p/17297723.html

相关文章

  • MySQL Others--select @@tx_read_only 执行频率较高问题
    问题描述MySQLJDBCDriver在5.1.36以下的版本且数据库版本大于5.6.5,在每次update/insert/delete请求时,均会向后端数据库发送select@@tx_read_only命令,判断下当前会话的事务是否是只读。MySQLJDBCDriver在5.1.36以上,如果使用execute()而不是executeUpdate()方......
  • flask框架04 导出项目 local flask生命执行流程 wtforms
    今日内容详细目录今日内容详细1请求上下文分析(源码:request原理)1.1导出项目的依赖1.2函数和方法1.3threading.local对象1.4偏函数1.5flask整个生命执行流程(1.1.4版本为例)2wtforms(了解)1请求上下文分析(源码:request原理)1.1导出项目的依赖#之前pipfreeze>requ......
  • ABB DSSR122 4899001-NK 执行各种各样的信号处理运营
    ABBDSSR1224899001-NK执行各种各样的信号处理运营数字信号处理(死后无子女。)的用途是数字处理例如通过计算机或更专门的数字信号处理器,执行各种各样的信号处理运营。这数字信号以这种方式处理的是一系列数字,它们表示样品的连续变量在时间、空间或频率等领域。在…里数字电子学......
  • flask请求上下文分析,源码request原理,wtforms,精确导出依赖,函数和方法,threading.locl对
    内容回顾蓝图第一步:导入第二步:实例化得到对象,可以指定static和templates第三步:app中注册蓝图,注册蓝图时,可以指定前缀第四步:使用蓝图,注册路由,注册请求扩展g对象当次请求的全局对象,在当次请求中可以放值和取值跟session的区别是session可以在多次请求中使用,g对象只在当次请......
  • 找不到d3dx9_42.dll,无法继续执行代码,的修复方法
    d3dx942.dll文件在是DirectX中的必备文件。,许多游戏或软件需要此文件运行。电脑如果丢失d3dx9_42.dll文件,就会导致软件或游戏无法正常运行打开。下面小编教大家如何解决电脑丢失d3dx9_42.dll的方法在电脑上找到浏览器打开后在顶部输入:dll修复文件.site【按下键盘的回车键打开】进......
  • StepsView显示步骤执行情况的控件
    显示步骤执行情况的控件,在某些情况下,还是非常有用的。<com.anton46.stepsview.StepsViewxmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/stepsView0"android:layout_width="match_parent"......
  • flask之请求上下文分析之导出项目依赖-函数和方法的区别-threading.local对象-偏函数-
    目录flask之请求上下文分析之导出项目依赖-函数和方法的区别-threading.local对象-偏函数-flask整个生命执行流程--wtforms今日内容详细1请求上下文分析(源码:request原理)1.1导出项目的依赖1.2函数和方法1.3threading.local对象1.4偏函数1.5flask整个生命执行流程(1.1.4版本......
  • flask-day4——pipreqs模块、函数和方法的区别、threading.local对象、偏函数、flask
    目录一、请求上下文分析(源码:request原理)1.1导出项目的依赖(pipreqs模块)1.2函数和方法1.3threading.local对象代码演示自定义封装local,实现兼容线程和协程1.4偏函数1.5flask整个生命执行流程(1.1.4版本为例)二、wtforms(了解)三、作业1、为什么有了gil锁还要互斥锁2、什么是进程,线......
  • 请求上下文分析、函数和方法、threading.local对象、偏函数、flask整个生命执行流程(1
    请求上下文分析(源码:request原理)导出项目的依赖#之前pipfreeze>requirments.txt把当前解释器环境下的所有第三方依赖都导出来#使用第三方模块,更精确的导出依赖pipreqs第一步:安装pip3installpipreqs第二步:使用命令,导出项目依赖pipreqs./w......
  • 【flask】flask请求上下文分析 threading.local对象 偏函数 flask1.1.4生命执行流程
    目录上节回顾今日内容1请求上下文分析(源码:request原理)1.1导出项目的依赖1.2函数和方法1.3threading.local对象1.4偏函数1.5flask整个生命执行流程(1.1.4版本为例)2wtforms(了解)补充上节回顾#1蓝图 -第一步:导入-第二步:实例化得到对象,可以指定static和templates......