我目前正在学习 Blazor 客户端(WebAssembly),在查看授权时,我试图验证用户是否有权访问 URI 中的路径。

给定一个 URI,如http://localhost:1234/ {route}/resource

在页面上,我可以将路由映射到属性,但是如何在 AuthorizationHandler 中访问此值以验证 JWT 是否具有具有此值的声明?

我尝试注入 RouteData 并尝试通过 IHttpContextAccessor 访问 HttpContext 但这是空的。

这是我正在努力学习的课程

public class RouteDataAccessor : IRouteDataAccessor
{
    private readonly RouteData _routeData;
    public RouteDataAccessor(IHttpContextAccessor httpContextAccessor)
    {
        httpContextAccessor.NullCheck(nameof(httpContextAccessor));
        httpContextAccessor.HttpContext.NullCheck(nameof(httpContextAccessor.HttpContext));

        _routeData = httpContextAccessor.HttpContext.GetRouteData();
    }

    public bool TryGetData(string key, out string value)
    {
        value = null;
        if (_routeData == null || !_routeData.Values.TryGetValue(key, out value))
        {
            return false;
        }

        return true;
    }
}

#1楼 票数:1 已采纳

首先,您不能在 WebAssembly Blazor 应用程序或服务器 Blazor 应用程序中使用 HttpContext。 以下我的回答链接将教你如何
将值传递给您的 AuthorizationHandler。 此外,它还说明了如何使用 AuthorizeView 组件来保护您的内容,并仅允许授权用户访问。

然后查看此答案以了解如何将 Jwt 令牌保存在本地存储上、如何检索它以及如何使用它来执行 HTTP 调用。

注意:这里缺少一种从 Jwt 令牌中提取声明并将其传递给 AuthorizationHandler 的方法。 这值得一个新问题......

您还需要实现 StateAuthenticationProvider,它可以与我的答案中显示的 Jwt 令牌机制结合使用(我称之为 TokenProvider)

根据您在问题中的描述,我觉得每件事对您来说都是新的,所以我建议您从这里开始......

希望这可以帮助...

  ask by Guy translate from so

未解决问题?本站智能推荐:

1回复

有没有办法从参数的注释中创建Blazor组件文档?

使用 swagger,您可以根据注释自动创建 API 方法的文档。 是否可以做同样的事情,但对于 Blazor 组件?
2回复

在Blazor中的两个子组件之间共享数据的最佳方式

我有这个代码。 其中@renderFragment 是动态渲染组件,网格组件是一些数据的列表,其中包含“添加新”、“编辑记录”、“删除”等操作。 如果我们单击“添加新”,则在@renderFragment 中动态打开添加新记录的表单,我们想在提交表单后刷新网格数据,但我们不知道如何在两个子组件之间共
2回复

如何将占位符或0添加到Blazor日期

我希望默认值是任何占位符,只有在选择要更改的日期时才 每当我改变
1回复

C#Blazor和数据绑定到日期时间?

我必须为现有的Asp.net Core 3.1 Blazor项目的日期和时间输入字段添加数据验证; 这是我第一次与 Blazor 合作。 我在日期输入字段(它有一个日期选择器和绑定到 DateTime 变量的数据)上设置了数据绑定,没有问题。 但是,时间输入的情况不同(它有一个时间选择器并绑定到另一
1回复

Blazor-如何在浏览器中保存布尔状态(真/假),使其在重新加载页面时不会改变?

我有两个不同的视图(列表和卡片),我想保存切换的视图,以便在 Blazor/C# 中重新加载页面时它不会更改。
1回复

在Blazor客户端和Blazor服务器之间存储和检索数据

我试图在blazor服务器或blazor客户端中存储数据。 然后,我需要在服务器和客户端中检索该数据。 一个例子是我在客户端创建一些字符串数据。 我想从blazor的服务器端读取该数据。 一旦在服务器端读取了该数据,我想对其进行更改,然后在客户端重新读取。 我尝试使用查询,会话,请求,响应,全局变量
1回复

如何将blazor客户端/服务器应用程序发布到LinuxWeb服务器?无权访问ssh并且dotnetpublish不提供index.html

我已经构建了一个目前没有问题的 blazor 应用程序。 当我调用“dotnet publish -c Release”时,我得到了一个已发布的项目,但输出是一个可执行文件,ubuntu 将其作为八位字节流或类似内容提取。 如果我运行它,它只会在 localhost:5000 上打开服务器。 通过
1回复

使用javascript检查blazor是在客户端还是服务器端运行的正确方法是什么?

我想要一个函数,它只在 blazor 服务器端运行一些 javascript 代码。 例如 检查 blazor 是否在服务器端运行的正确方法是什么?