繁体   English   中英

Blazor(服务器端)身份验证和 static 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM