Jwt 身份验证在 Blazor Serverside 中不起作用

Jwt Authentication doesn't work in Blazor Serverside

我在 Blazor 客户端托管项目中使用了 Jwt 身份验证,其中包含角色和所有内容(使用身份),但是当我在 Blazor 服务器端做同样的事情时它不起作用,例如在我设置令牌之后Header:

client.DefaultRequestHeaders.Add("Authorization", $"Bearer {Model.Token}");                
            Console.WriteLine($"Is authenticated = {httpContext.HttpContext.User.Identity.IsAuthenticated}");

IsAuthenticated returns false,当我导航到主页(导致刷新)时,IsAuthenticated 仍然 returns false 并且无法通过 HttpContext.User.Identity.Name 访问用户名!!有没有解决方法。 (Blazor 服务器端预览版 6 中的默认身份验证仅限于本地化和其他方面,我不想使用它)

我可以在没有 cookie 或 header 的情况下解决我的问题,我创建了一个 Auth Class,其中包含用户名、isauthenticated 以及角色和方法 IsInRole,然后注入(作为单例)这个 class 到每个使用或填充此 class 的视图,然后在成功登录时填充它(我使用 Identity checkpasswordsigninasync)我填充此 class 并通过应用程序使用它,在注销时我只是创建一个空的实例。 我认为因为一切都在服务器上运行,所以这个 class 是安全的,它唯一的限制是页面刷新身份验证丢失并且 HttpContext.User 为空。

编辑

首先,在刷新时,单例服务不会丢失它们的数据,因此身份验证模型不会为空。

其次:如果您觉得此 Auth 模型使编程不熟悉,我可以使用 IEnumerable -claims 变量在登录时设置 ClaimPrincipal,如下所示:

httpContext.HttpContext.User = new System.Security.Claims.ClaimsPrincipal(new ClaimsIdentity(claims));

然后使用 Intuitive HttpContext.User.IsInRole 和 HttpContext.User.Identity.Name,就像我们在 Web Forms 中所做的那样。