[英]Blazor (server side) authentication and static files
根据 Microsoft 的建议,我使用自定义 AuthenticationStateProvider 服务来处理 Blazor 服务器页面的身份验证/授权。
在 razor 组件中一切正常,我可以在其中使用 [Authorize] 属性或 AuthorizeView/Authorized/NotAuthorized 标签。
现在,我想在 wwwroot 文件夹之外提供 static 个文件,但可以控制用户是否经过身份验证以便提供这些文件。
有没有办法控制对 wwwroot 文件夹外的 static 文件的访问?
我发现类似于(在程序或启动中):
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = (context) =>
{
if (context.Context.Request.Path.StartsWithSegments("/MyRequestPath"))
{
context.Context.Response.Headers.Add("Cache-Control", "no-store");
if (!context.Context.User.Identity.IsAuthenticated)
{
context.Context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
context.Context.Response.ContentLength = 0;
context.Context.Response.Body = Stream.Null;
}
}
},
FileProvider = new PhysicalFileProvider("PathToMyFilesOutsidewwwroot"),
RequestPath = "/RequestPath"
});
问题是它使用 Context.User.Identity.IsAuthenticated,即它使用 HTTPContext,它在 Blazor 页面中不可用(这就是我们必须使用 AuthenticationStateProvider 的原因)。
我想坚持只使用 Blazor 最佳实践,而不是试图通过脚手架、javascript 或其他任何方式来规避它。
提前致谢。
最后,我坚持使用 app.UseStaticFiles... 方法,但为了使其正常工作,我必须通过 cookies(在 Blazor 之外)添加身份验证。 在 Blazor 内部我仍然使用 AuthenticationStateProvider,所以我唯一需要注意的是在用户登录时同时通过 cookies 和 AuthenticationStateProvider 进行身份验证。我想这是有道理的,因为通过 cookies 进行身份验证(在进入Blazor "environment") 让我有机会调用 razor 组件中的控制器或其他页面,同时仍然经过身份验证(通过 cookie)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.