c# - 您如何使用 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)?
解决方案
推荐阅读
- swift - 复制 macOS Big Sur 的分段单元格样式
- sql-server - 我需要计算下个月的第 15 个工作日(不包括周末)
- c - 使用openmp加速矩阵求幂
- coldfusion - 转换 Coldfusion - 已发布的 WDDX 请求是什么样的?
- python - 如何从多语言 Excel 文本数据中删除停用词
- yosys - 通行证中技术地图调用的路径选项
- c++ - 存储最小数量的静态变量
- laravel - Vue-laravel 中的动态 CSS 有问题
- javascript - Firebase orderByChild 在我的数据库中不起作用
- arrays - 图像模糊问题