【发布时间】:2021-11-13 17:34:58
【问题描述】:
我目前正在开发一个应用程序,在该应用程序中我设置了授权回退策略,以避免必须在每个控制器上单独设置策略。问题是您现在必须登录才能访问“wwwroot”(我的前端所在的位置)下的静态文件,这显然是错误的,因为您需要前端才能登录。
有没有办法使用回退策略但从中排除静态文件(例如,以某种方式添加 AllowAnonymous)?还是我走错了路,应该以不同的方式解决这个问题?
编辑:直接访问静态文件 (https://localhost:5001/index.html) 有效,但是当我调用根 url (https://localhost:5001) 和 @987654321 时出现 401 错误@。如果我注释掉后备策略,一切正常。
这是我当前的 Startup.cs(我正在尝试 .NET 6)
授权服务:
builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireRole(Roles.User)
.Build();
});
中间件:
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Web v1"));
}
else
{
app.UseHsts();
}
app.UseHealthChecks("/health");
app.UseHangfireDashboard();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseMiddleware<UserMiddleware>();
app.UseResponseCompression();
app.MapControllers();
app.MapFallbackToFile("index.html");
app.Run();
【问题讨论】:
-
我不是 100%,确定你想要完成什么。似乎它正在按预期工作。您是否试图让所有 razorpages/endpoints/etc 具有除 homecontroller 控制器及其索引方法之外的后备策略?
-
您是否尝试重新排序中间件?
-
@mohammadreza 是的,我做到了,尝试将 MapFallbackToFile 中间件放在授权和身份验证之前,但这并没有改变任何东西
-
@Ben 我希望所有东西都有备用策略,除了我的 wwwroot 中的内容。我没有 HomeController 和 index 方法,因为我希望根路径转到 wwwroot 中的 JS 前端
-
@BenMatthews 我认为它现在可以工作,这无疑使我朝着正确的方向前进。不过,我还需要添加新策略。这是我现在的代码,如果你想把它放到你的 anwser 中(带有一点格式:D)
标签: asp.net asp.net-core asp.net-web-api authorization