当前位置: 首页 > 编程语言 > C#

拦截asp.netcore授权操作授权成功后执行自定义操作分享

时间:2023-04-10 23:25:42 C#

拦截asp.netcore授权操作授权成功后执行自定义操作我的web应用控制器有[Authorization]属性,所以任何端点命中都会确保用户首先被重定向到登录OAuth服务器(如果尚未登录)。我现在想在每次用户登录时开始将用户声明写入Web应用程序数据库。为此,我需要在每次用户成功登录/授权时在Web应用程序上运行一些代码。我得到了一个线索,它涉及到添加自定义中间件。我的启动ConfigureServices代码目标如下:publicclassStartup{publicStartup(IConfigurationconfiguration,IHostingEnvironmentenv){Configuration=configuration;环境=环境;}publicIHostingEnvironmentEnv{get;}公共IConfiguration配置{得到;}publicvoidConfigureServices(IServiceCollectionservices){services.AddMvc();//添加IDistributedCache的默认内存中实现。services.AddDistributedMemoryCache();services.AddSession(options=>{options.Cookie.HttpOnly=true;});JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();services.AddAuthentication(options=>{options.DefaultScheme=CookieAuthenticationDefaults.AuthenticationScheme;options.DefaultChallengeScheme=OpenIdConnectDefaults.AuthenticationScheme;}).AddCookie().AddOpenIdConnect(options=>{options.SignInScheme="Cookies";options.Authority=配置["auth:oidc:authority"];options.RequireHttpsMetadata=!Env.IsDevelopment();options.ClientId=Configuration["auth:oidc:clientid"];options.ClientSecret=Configuration["auth:oidc:clientsecret"];options.ResponseType="codeid_token";options.Scope.Add(Configuration["auth:oidc:clientid"]);options.Scope.Add("offline_access");options.GetClaimsFromUserInfoEndpoint=true;options.SaveTokens=true;});}...[]所以我的问题是:我需要添加什么代码,以及在哪里调用将包含自定义操作的方法?OpenIDConnectOptions类具有适用于此类场景的Events属性此Events属性(OpenIdConnectEvents)具有OnTokenValidated属性(Func),您可以覆盖该属性以在验证令牌时收到通知。这是一些代码:options.Events.OnTokenValidated=ctx=>{//你的代码在这里。返回任务.CompletedTask;};在示例代码中,ctx是最终包含Principal属性(ClaimsPrincipal)的TokenValidatedContext:您应该能够使用This属性来获取所需的声明等,例如ctx.Principal.FindFirst(...)。正如@Brad在评论中提到的那样,每个请求都会调用OnTokenValidated并且(根据您自己的评论)不会包含您需要的UserInfo。为此,您可以像这样使用OnUserInformationReceived:options.Events.OnUserInformationReceived=ctx=>{//这里,ctx.User是一个JObject,应该包含您需要的UserInfo。返回任务.CompletedTask;};这个例子中的ctx是一个UserInformationReceivedContext:它仍然包含Principal属性,但也有一个User属性(JObject),我在代码中用注解来称呼它。您应该查看OpenIdConnectOptions.Events。我没有示例,但这是挂接OIDC中间件的地方。以上就是C#学习教程:拦截asp.netcore授权操作授权成功后执行自定义操作。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: