【问题标题】:How to get current User/ClaimsPrincipal in Middleware .Net Core Web API如何在中间件 .Net Core Web API 中获取当前用户/声明主体
【发布时间】:2020-07-19 16:06:19
【问题描述】:

在请求进入任何控制器之前,我需要在中间件中访问当前用户的声明。

登录时我已经设置了这样的声明。

new Claim(ClaimTypes.NameIdentifier, user.ID.ToString());

//...

public async Task InvokeAsync(HttpContext httpContext)
{
    var claim = httpContext.User.FindFirst(ClaimTypes.NameIdentifier);
}

它返回 null

我知道我们可以使用控制器中的ControllerBase.User 属性访问它(我能够获得),但我需要在中间件中访问它。

有什么办法可以做到吗?

我做错了吗?

【问题讨论】:

  • 取决于中间件注册顺序。确保您的中间件在身份验证中间件之后注册
  • @Nkosi 你太棒了,谢谢。如果您将此作为答案,我可以接受。谢谢。

标签: c# .net asp.net-core asp.net-core-webapi


【解决方案1】:

您可以在 Controllers 中使用 ControllerBase.User 属性访问它的原因是,它会在设置 User 之后在管道中稍后发生。

这取决于中间件注册顺序。

Startup.Configure 方法中添加中间件组件的顺序定义了请求时调用中间件组件的顺序和响应的相反顺序。 顺序对于安全性、性能和功能至关重要。

User 由身份验证中间件设置,因此请确保在身份验证中间件之后注册依赖于 User 的自定义中间件

//...

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

app.AddCustomMiddleware();

//...

参考ASP.NET Core Middleware

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 2018-02-17
    • 2019-03-07
    • 2017-06-11
    • 2019-01-19
    • 2014-02-27
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多