在 asp.net core 3.1+ 中使用多个中间件进行身份验证和授权

Posted

技术标签:

【中文标题】在 asp.net core 3.1+ 中使用多个中间件进行身份验证和授权【英文标题】:Authentication and authorization with multiple middlewares in asp.net core 3.1+ 【发布时间】:2021-05-11 06:10:42 【问题描述】:

我正在尝试在 asp.net core 3.1 API 项目中配置身份验证和授权中间件,以便能够从以下位置授权用户:

本地 IdentityServer4 (IDS) 和 在 Azure (AAD) 中管理的 AD。

我计划在这两种情况下都使用 JWT 不记名令牌来调用 API 端点。

IDS 用户在移动应用程序中根据 IDS 进行身份验证。 AAD 用户在管理员 SPA 中针对 AAD 进行身份验证。 Web api 为 IDS 用户提供单独的公共端点,为 AAD 用户提供管理端点。

有很多关于如何分别为 IDS 和 AAD 配置 Web API 的工作示例,而不是一起配置。

有没有人举个例子说明应该如何做到这一点?

是否甚至可以对传入的 JWT 不记名令牌使用不同的身份验证方案(例如 JwtBearerDefaults.AuthenticationSchemeOpenIdConnectDefaults.AuthenticationScheme)?

我们将不胜感激。

【问题讨论】:

【参考方案1】:

您可以有多个 AddOpenIdConnect 方案,一个用于 AzureAD,一个用于 IdentityServer,然后让用户挑战其中一个,例如:

等待 HttpContext.ChallengeAsync("identityserver"); 要么 等待 HttpContext.ChallengeAsync("azuread");

JwtBearerDefaults 仅处理传入的令牌并从中创建用户。

但是每个 JwtBearer API 都喜欢有一个“权威”服务器(不是多个)。所以你可能需要添加多个 AddJwtBearer(每个服务器一个)。

或者您使用 IdentityServer 作为您的主要授权提供者,然后通过 IdentityServer 登录到 Azure。因此,您的内部服务器只需要了解 IdentityServer 及其令牌。

【讨论】:

谢谢。我去看看。 brb :)

以上是关于在 asp.net core 3.1+ 中使用多个中间件进行身份验证和授权的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 3.1 中使用 Java?

Wcf 服务在 .NET Core 3.1 控制台应用程序中工作,但在 ASP.NET Core 3.1 Web API 中无法工作

如何在 ASP.NET Core 3.1 中启用多重身份验证?

如何在 Asp.net Core 3.1 中使用 Ajax 刷新或重新加载 ViewComponent?

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

如何正确解析要在 ASP.NET Core 3.1 的 ConfigureServices() 中使用的服务?