在 Blazor 客户端 AuthorizationHandler 中访问 RouteData
Accessing RouteData in Blazor Client Side AuthorizationHandler
我目前正在学习 Blazor 客户端 (WebAssembly),在查看授权时,我试图验证用户是否有权访问 URI 中的路径。
给定一个像 http://localhost:1234/{route}/resource
这样的 URI
在页面上,我可以将路由映射到 属性,但我如何才能在 AuthorizationHandler 中访问此值以验证 JWT 是否具有此值的声明?
我尝试注入 RouteData 并尝试通过 IHttpContextAccessor 访问 HttpContext 但它是空的。
这是class我正在努力工作
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。
下面link我的回答教你如何
到您的 AuthorizationHandler。此外,它还说明了如何使用 AuthorizeView 组件来保护您的内容,并只允许授权用户访问。
然后查看 this answer 了解如何将 Jwt 令牌保存在本地存储、如何检索它以及如何使用它执行 HTTP 调用。
注意:此处缺少从 Jwt 令牌中提取声明并将其传递给 AuthorizationHandler 的方法。这值得提出一个新问题...
您还需要实现 StateAuthenticationProvider,它可以与我的答案中显示的 Jwt 令牌机制结合使用(我称之为 TokenProvider)
根据你在问题中的描述,我的印象是对你来说一切都是新的,所以我建议你 start here...
希望这对您有所帮助...
我目前正在学习 Blazor 客户端 (WebAssembly),在查看授权时,我试图验证用户是否有权访问 URI 中的路径。
给定一个像 http://localhost:1234/{route}/resource
这样的 URI在页面上,我可以将路由映射到 属性,但我如何才能在 AuthorizationHandler 中访问此值以验证 JWT 是否具有此值的声明?
我尝试注入 RouteData 并尝试通过 IHttpContextAccessor 访问 HttpContext 但它是空的。
这是class我正在努力工作
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。
下面link我的回答教你如何
然后查看 this answer 了解如何将 Jwt 令牌保存在本地存储、如何检索它以及如何使用它执行 HTTP 调用。
注意:此处缺少从 Jwt 令牌中提取声明并将其传递给 AuthorizationHandler 的方法。这值得提出一个新问题...
您还需要实现 StateAuthenticationProvider,它可以与我的答案中显示的 Jwt 令牌机制结合使用(我称之为 TokenProvider)
根据你在问题中的描述,我的印象是对你来说一切都是新的,所以我建议你 start here...
希望这对您有所帮助...