【发布时间】:2022-01-18 15:13:08
【问题描述】:
我正在实现一些与单体通信的微服务,所有这些都是使用 .net 核心完成的。 目前,我的网关根据其结构验证用户 jwt 令牌是否有效,但问题是,我需要将用户 ID(来自单体应用程序)传递给微服务,并且我被告知需要对其进行验证. 因此,考虑到这一点,我应该采用什么方法来验证传递给微服务的用户 ID 是否存在?
提前致谢
【问题讨论】:
标签: .net-core api-gateway ocelot
我正在实现一些与单体通信的微服务,所有这些都是使用 .net 核心完成的。 目前,我的网关根据其结构验证用户 jwt 令牌是否有效,但问题是,我需要将用户 ID(来自单体应用程序)传递给微服务,并且我被告知需要对其进行验证. 因此,考虑到这一点,我应该采用什么方法来验证传递给微服务的用户 ID 是否存在?
提前致谢
【问题讨论】:
标签: .net-core api-gateway ocelot
首先,IMO jwt 令牌应该由受信任方创建,并且它包含的任何内容都应该已经有效,因此如果用户一开始不存在,则 IdentityProvider 不应提供 jwt 令牌。
但如果您必须这样做,您可以为该场景创建一个自定义中间件,从请求中读取令牌并验证用户 ID 是否存在。
您可以阅读有关自定义中间件的更多信息here。
您的中间件可能如下所示:
public class UserIdValidatprMiddleware
{
private readonly RequestDelegate _next;
public RequestCultureMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context, IIdentityService identityService, IUserStore userStore)
{
var userId = identityService.GetUserIdFromToken();
var userExists = await userStore.CheckIfUserExists(userId);
if (!userExists) throw SomeException();
await _next(context);
}
}
【讨论】: