【问题标题】:ASP.NET Core authorization permission access folder with Identity Server带有 Identity Server 的 ASP.NET Core 授权权限访问文件夹
【发布时间】:2020-12-09 10:48:03
【问题描述】:

在我的 ASP.NET Core 项目中,我与 Identity Server 进行了集成。因此,用户必须登录 Identity Server,然后才能访问应用程序。

设计部门给了我一些 HTML5 的静态页面来发布,但只有经过身份验证的人或具有特定角色的人才能看到这些页面。

我想用旧的web.config 来保护这个文件夹,就像

<location path="subdir1">
    <system.web>
        <authorization>
            <allow users ="*" />
        </authorization>
    </system.web>
</location>

但它也不起作用,因为我想使用角色而不是用户。

有什么想法吗?

更新

一个快速的解决方案是在 Startup.cs

中添加一些设置
public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddAuthorization(options =>
    {
        options.FallbackPolicy = new AuthorizationPolicyBuilder()
                                         .RequireAuthenticatedUser()
                                         .Build();
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseCookiePolicy();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseSession();

    const string cacheMaxAge = "604800";
    app.UseStaticFiles(new StaticFileOptions
    {
        OnPrepareResponse = ctx =>
        {
            ctx.Context.Response.Headers.Append(
                "Cache-Control", $"public, max-age={cacheMaxAge}");
        },
        FileProvider = new PhysicalFileProvider(
                           Path.Combine(env.ContentRootPath, "html")),
        RequestPath = "/infographics"
    });

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

目录html 位于项目的根目录中。该文件夹受到保护,但网站的其余部分无法读取 wwwroot 文件夹,例如我的主页如下所示:

我可以在 Devtool 中看到 wwwroot 下的所有文件都无法访问

【问题讨论】:

  • 在 Startup.cs 文件中,尝试在 app.UseRouting(); 之前添加 app.UseStaticFiles()。 wwwroot 文件夹下的静态文件(CSS、JavaScrip 和图像)不需要身份验证。更多详细信息,请参阅Static file authorization
  • 我应用了文档中提到的更改。现在我有了 CSS,但在受保护的文件夹“找不到页面”中看不到文档。文件夹和文件在那里。此外,本地不仅在服务器上不起作用

标签: c# asp.net-core identityserver4


【解决方案1】:

我了解您的要求,但 ID4 令牌提供程序不能这样工作。根据我的理解,AuthenticationAuthorization 是两个不同的任务,IdS4 仅负责Authentication,它只会验证凭据并提供Access/Identity 令牌以及额外的必需claims。所以如果你想authorize请求那么你应该实现你自己的逻辑(你可以为此目的创建你自己的服务或在你的API中编写你的逻辑)。

对于授权,我强烈建议在您的 .NET 核心应用中使用 policy-based authorization

请同时查看Microsoft's 文档。

编码愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多