【问题标题】:How can I stop a request in Ocelot's PreAuthenticationMiddleware?如何在 Ocelot 的 PreAuthenticationMiddleware 中停止请求?
【发布时间】:2019-11-08 08:58:45
【问题描述】:

在 ocelot 身份验证之前,我必须对请求的 jwt 进行一些检查,所以我在 PreAuthenticationMiddleware 中进行检查,如下所示:

var config = new OcelotPipelineConfiguration
{
    PreAuthenticationMiddleware = async (ctx, next) =>
    {
        var jwt = ctx.HttpContext.Request.Headers["Authorization"];

        if (jwtIsOk(jwt)) next.Invoke();
        // else ...
    }
};

app.UseOcelot(config).Wait();

是否可以返回自定义响应,而不是不调用 next

我想返回 401 错误

【问题讨论】:

  • 它们是两个不同的东西。 Next 调用下一个中间件。如果您想添加到响应中,您应该使用ctx.HttpContext.Response.WriteAsync(...) 写入它并设置状态代码。执行此操作后不调用 next 将导致管道终止。

标签: c# api-gateway asp.net-core-middleware ocelot


【解决方案1】:

我想这就是你要找的:

        var configuration = new OcelotPipelineConfiguration
        {
            PreAuthenticationMiddleware = async (ctx, next) =>
            {
                if (xxxxxx) 
                {
                    ctx.Errors.Add(new UnauthenticatedError("Your message"));

                    return;
                }

                await next.Invoke();
            }
        };

在这种情况下,我使用的是 UnauthenticatedError(一个 Ocelot 的类),它将以 401 结尾。还有更多这样的。您还可以创建自己的继承自 Ocelot.Errors.Error 的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多