gpt4 book ai didi

authorization - MapWhen() 中的 MVC 授权应用于所有 Controller

转载 作者:行者123 更新时间:2023-12-03 14:50:32 24 4
gpt4 key购买 nike

在 ASP.Net Core 3.0 Preview 7 中,我尝试编写如下代码:

public void Configure(IApplicationBuilder app) {
app.MapWhen(context =>
context.Request.Path.StartsWithSegments(
new PathString("/UnsecureLog")),
a => {
a.UseRouting();
a.UseEndpoints(endpoints => {
endpoints.MapControllers();
});
}
);

app.UseAuthentication();
app.UseAuthorization();

app.MapWhen(context =>
context.Request.Path.StartsWithSegments(
new PathString("/SecureLog")),
a => {
a.UseRouting();
a.UseEndpoints(endpoints => {
endpoints.MapControllers()
.RequireAuthorization("MustBeReader");
});
}
);
}
我的目标是允许某些 Controller 在没有身份验证的情况下在中间件中处理,我的想法是 MapWhen() 是实现这一目标的方法。
相反,我在点击 /UnsecureLog 时看到了这个错误。端点:
System.InvalidOperationException: Endpoint ... contains authorization metadata,
but a middleware was not found that supports authorization.
Configure your application startup by adding app.UseAuthorization()
inside the call to Configure(..) in the application startup code.
翻译:“您如何为您不想保护的端点实现安全功能”。
我的收获是任何调用 RequireAuthorization("MustBeReader")在任何 MapWhen() block 处理 Controller 逻辑实际上将应用于所有 MVC Controller 路由。
我当前的解决方法是删除 .RequireAuthorization("MustBeReader")调用第二个 MapWhen() 代码块并将其作为属性 ( [RequireAuthorization("MustBeReader")] ) 重新应用到我希望保护的那些端点。这可以正常工作并产生所需的行为。
但那不是目标,是吗?
我更愿意用类似的策略管理整个 Controller 组,同时完全避免其他人的安全性,并在 Configure() 中处理所有这些。相反,我必须将所需的授权要求逐个应用于每个 Controller 。
我希望有一种更好的方法来实现路由,从而避免这里提到的问题。也许我做错了什么。
想法,有人吗?

最佳答案

在您的 Startup 类中将以下代码向上移动(在 app.MapWhen 上方)。

 app.UseAuthentication();
app.UseAuthorization();

关于authorization - MapWhen() 中的 MVC 授权应用于所有 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57397059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com