访问Blazor客户端授权处理程序中的RouteData



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

给定类似的URIhttp://localhost:1234/{路由}/资源

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

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

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

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

您还需要实现StateAuthenticationProvider,它可能与Jwt令牌机制相结合,如我的回答所示(我称之为TokenProvider(

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

希望这能帮助。。。

最新更新