我目前正在学习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;
}
}
答案 0 :(得分:1)
首先,您不能在WebAssembly Blazor应用程序或Server Blazor应用程序中使用HttpContext。
以下指向我的答案的链接将教您如何操作
pass a value到您的AuthorizationHandler。此外,它还说明了如何使用AuthorizeView组件来保护您的内容并仅允许授权用户访问。
然后参见this answer来了解如何将Jwt令牌保存在本地存储中,如何检索它以及如何使用它执行HTTP调用。
注意:这里缺少从Jwt令牌中提取声明并将其传递给AuthorizationHandler的方法。这值得一个新问题...
您还需要实现StateAuthenticationProvider,它可以与我的答案中显示的Jwt令牌机制结合使用(我称它为TokenProvider)
从您对问题的描述中,我得到的印象是,每件事对您来说都是新事物,所以我建议您start here...
希望这对您有帮助...