【发布时间】:2022-01-10 20:44:15
【问题描述】:
几乎所有 dotnet 默认模板在管道配置中都有 app.UseAuthorization() 行,而没有 app.UseAuthentication()。例如,inline 是在 .net 6.0 中通过运行 dotnet new webapp 创建的 webapp
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
让我感兴趣的是,授权只能与身份验证一起使用,因此在管道中必须同时拥有 app.UseAuthentication() 和 app.UseAuthorization()。此外,顺序必须准确,即app.UseAuthentication() 后面必须跟app.UseAuthorization()。
但是,使用默认模板创建的管道只有 app.UseAuthorization()。有人可以阐明在管道中添加 app.UseAuthorization() 的目的可能是什么吗?
【问题讨论】:
-
我不确定,但在文档中提到,当授权使用端点路由路由的资源时,此调用必须出现在对 app.UseRouting() 和 app.UseEndpoints( ...) 以使中间件正常运行。所以它会为它生成代码,这样开发人员就不会犯错误。我会请专家发表评论
-
我明白了。因此,当我调用一个用 [Authorize] 装饰的操作方法而没有正确设置身份验证和授权时,我在开发人员异常页面上得到的很好的异常是因为这个中间件?
-
谢谢。这回答了我的问题。
-
@DurgaPrasad,很高兴听到它确实有助于解决问题。我将其添加为答案,希望它可以帮助其他社区成员快速解决类似问题。
标签: c# .net asp.net-core .net-core