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 中所做的那样。
我在 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
httpContext.HttpContext.User = new System.Security.Claims.ClaimsPrincipal(new ClaimsIdentity(claims));
然后使用 Intuitive HttpContext.User.IsInRole 和 HttpContext.User.Identity.Name,就像我们在 Web Forms 中所做的那样。