我正在开发一个使用会话、身份验证和授权的ASP.NET代码库.

它们按以下顺序进行初始化:

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

Middleware Order文档显示app.UseSession() after其他两个,但文档后来说:

会话中间件(UseSession)建立和维护会话状态.如果应用程序使用会话状态,则为call Session Middleware after Cookie Policy Middleware and before MVC Middleware.

Emphasis mine.

我们的应用程序使用自定义身份验证码来处理不同的流,其中之一初始化会话内的一些数据.

因此,将app.UseSession()方法after放置为身份验证/授权中间件会导致应用程序在该流被触发时崩溃.

在其他两个之前离开app.UseSession()个是安全的吗?

推荐答案

UseAuthenticationUseAuthorization都不是Cookie策略中间件,例如添加UseCookiePolicy(参见EU General Data Protection Regulation (GDPR) support in ASP.NET Core).

Session and state management in ASP.NET Core号文件提到了关于订单的以下几点:

中间件的顺序很重要.在UseRouting之后、MapRazorPagesMapDefaultControllerRoute之前呼叫UseSession.请参见Middleware Ordering.

您已经链接的订购文档和我在那里找到的适用于这种情况的唯一附加订单说明如下:

UseCorsUseAuthenticationUseAuthorization必须按显示的顺序出现.

根据文档和快速代码窥探会话中间件,应该可以在进行身份验证之前使用它:

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

Csharp相关问答推荐

获取Windows和Linux上的下载文件夹

ASP.NET Core 8 Cors标题未显示

使用其可能实现的基类和接口的属性的方法

EF Core判断是否应用了AsSplitQuery()

HttpContext. RequestAborted当Android APP失go 连接时未取消

EF Core. Income和. AsNoTracking正确用法

无法解析数据库上下文的服务

在具有主构造函数的类中初始化属性时出现警告

具有单一导航属性的EF核心一对多关系

应用程序启动器,可 Select 物理屏幕

在路由中使用枚举

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

Unix上的.NET(核心):.NET意外地未看到通过P/Invoke系统调用对环境变量进行的进程内修改

带有可选参数的模拟方法返回意外的不同值,具体取决于可选的默认值

如何在不复制或使用输出的情况下定义项目依赖

.NET Google Workspace API获取错误CS0266

流畅的验证--如何为属性重用规则?

Xamarin Forms应用程序中登录页面的用户名和密码编辑文本之间不需要的空格

C#If条件格式

将带有嵌套If-Else的Foreach循环转换为Linq表达式