0

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

给定一个像http://localhost:1234/ {route}/resource这样的 URI

在页面上,我可以将路由映射到属性,但是如何在 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;
    }
}
4

1 回答 1

1

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

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

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

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

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

希望这可以帮助...

于 2020-02-21T11:21:42.757 回答