在 .NET Core 6 中触发 OAuth2 流,用于具有 JWT 承载令牌的无状态微服务,无需 Cookie 会话

问题描述 投票:0回答:1

我有一个强制身份验证的 .NET Core 6 API 网关,然后需要将经过身份验证的请求传递给各个微服务(检查授权)。我想在 API 网关层实现 OAuth2 流,将 302 重定向响应返回到返回 URL,将不记名令牌存储在浏览器的会话存储中。然后,UI 可以将不记名令牌包含在带有授权标头的后续请求中。

我遇到的问题是 OpenIDConnect 流程只允许我使用基于会话的 cookie 来执行此操作。这在无状态微服务实现中并不理想,因为它要求我将基于用户的关联性设置为包含内存中会话存储的 API 网关实例,或者要求我将会话存储委托给外部会话存储(例如, Redis)。

我想尽可能避免会话,但是查看 Microsoft.AspNetCore.Authentication.AuthenticationService 我必须在 .AddOpenIdConnect() 选项中配置 SignInScheme,并且唯一实现 IAuthenticationSignInHandler 的是 CookieAuthenticationHandler

如何让 OAuth2 流程正常工作(最好与 OpenIDConnect 一起使用),同时能够配置如何将令牌返回给用户,而无需使用基于 cookie 的会话?

c# asp.net-core security openid-connect
1个回答
0
投票

启动 OpenID Connect 流程的服务实例也应该与完成流程的服务实例相同。

关于 cookie,您可以通过正确配置数据保护 API,使会话 cookie 跨服务工作,以便跨服务使用相同的加密密钥。

参见: 配置 ASP.NET Core 数据保护

我多年前也曾在这里写过关于数据保护 API 的博客:

将 ASP.NET Core 数据保护密钥环存储在 Azure Key Vault 中

© www.soinside.com 2019 - 2024. All rights reserved.