【问题标题】:How do I extend the authentication process in a blazor server side app?如何在 blazor 服务器端应用程序中扩展身份验证过程?
【发布时间】:2021-01-04 02:59:50
【问题描述】:

我在 blazor 服务器端应用程序中使用 Cookie 身份验证。

await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(claimsIdentity), authProperties);

我现在要做的是在 blazor 服务器端应用程序验证用户授权时更改静态类中的静态变量。有什么简单的方法可以做到这一点?

编辑: 这是基于 Plamen Yordanov 解决方案的实现。

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, configureOptions =>
                {
                    bool personalNummerConfigured = false;
                    configureOptions.Events.OnValidatePrincipal = (context) =>
                    {
                        if (!personalNummerConfigured)
                        {
                            var employeeClaim = context.Principal.Claims.Where(x => x.Type == "EmployeeId").FirstOrDefault();
                            int.TryParse(employeeClaim.Value, out int personalNummer);
                            FbController.PersonalNummer = personalNummer;
                            Console.WriteLine($"PersonalNummer: {employeeClaim.Value}");
                            personalNummerConfigured = true;
                        }
                        return Task.CompletedTask;
                    };
                });

【问题讨论】:

  • 尽可能避免static。尤其是授权。

标签: c# asp.net-core blazor blazor-server-side


【解决方案1】:

您可以订阅某些 cookie 身份验证事件,并且有一个 OnSignedIn event

可以像这样在Startup.cs 中配置此事件:

.AddCookie("AppCookie", configureOptions => {
     configureOptions.Events.OnSignedIn = (context) => 
         {
             //handler code
             return Task.CompletedTask;
         };
 });

您可以在官方docs查看所有可以订阅的事件

【讨论】:

  • 谢谢!这正是我搜索过的。但是我必须使用 OnValidatePrincipalEvent,因为当有人重新访问该站点时会调用此事件。我在上面的问题中添加了我的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2022-01-27
相关资源
最近更新 更多