首页 > 解决方案 > 您如何使用 ProtectedBrowserStorage 和 BlazorServer AspNet 身份验证进行基于 Cookie 的登录?

问题描述

我有一个使用 AspNet 身份验证在 BlazorServer 上创建声明并将它们手动添加到身份验证的系统。

// Maps internal User object into an IdentityUser object
// TODO: Use mapping library
var blazorUser = UserOpenIDToIdentityUser.ConvertUserOpenIDToIdentityUser(user);

var principal = await _signinManager.CreateUserPrincipalAsync(blazorUser);

var identity = new ClaimsIdentity(
            principal.Claims,
            Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme
        );
principal = new System.Security.Claims.ClaimsPrincipal(identity);

_signinManager.Context.User = principal;
_hostAuthentication.SetAuthenticationState(Task.FromResult(new AuthenticationState(principal)));

这可行,但如果用户刷新它就消失了,因为 signalR 是服务器端,所以不能将 cookie 写入用户浏览器。我读到的一个解决方案是在页面上使用 javascript 来保存 cookie,但我更愿意只使用新的 LocalStorage for Asp.Net-Core(我知道旧的 Blazored 也有这个选项)。现在这对我来说变得模糊了。我需要有类似的东西

services.AddAuthentication(options =>
{
    options.DefaultScheme = "MyScheme";
}).AddCookie("MyScheme", options =>
{
    options.Cookie.Name = "CookieName";
});

使用 LocalStorage/sessionStorage。

我将如何指定我想要哪一个?如果我无法写入身份验证/cookies,如果没有当前用户,我是否只是从中加载用户(我不想/不会是最好的使用 javascript)?

标签: c#asp.net-coreauthenticationcookiesblazor-server-side

解决方案


推荐阅读