【发布时间】: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