使用 Ocelot API 网关验证用户 ID
Validate user id with Ocelot API gateway
我正在实现一些与整体通信的微服务,所有这些都是使用 .net 核心完成的。
目前我的网关根据它的结构验证用户 jwt 令牌是否有效,但问题是,我需要将用户 ID(从单体)传递给微服务,我被告知需要验证它.
因此,考虑到这一点,我应该采用什么方法来验证传递给微服务的用户 ID 是否存在?
提前致谢
首先,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);
}
}
我正在实现一些与整体通信的微服务,所有这些都是使用 .net 核心完成的。 目前我的网关根据它的结构验证用户 jwt 令牌是否有效,但问题是,我需要将用户 ID(从单体)传递给微服务,我被告知需要验证它. 因此,考虑到这一点,我应该采用什么方法来验证传递给微服务的用户 ID 是否存在?
提前致谢
首先,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);
}
}