在 Ocelot 中注入 AuthenticationMiddleware - 如何返回 401

Posted

技术标签:

【中文标题】在 Ocelot 中注入 AuthenticationMiddleware - 如何返回 401【英文标题】:Injecting AuthenticationMiddleware in Ocelot - how to return 401 【发布时间】:2019-06-22 07:06:31 【问题描述】:

我认为这个问题有点琐碎,但我找不到答案:

我使用 Ocelot 作为 API 网关并使用我自己的身份验证中间件,因为我需要根据我们自己的数据库对用户进行身份验证。快乐的道路工作得很好。但是,如果用户无法进行身份验证,我只能返回 500 内部服务器错误,但我不知道如何让 ocelot 返回 401。

谁能帮帮我?这将是我的意思的基本意思:

var authSuccess = authenticate();
if (authSuccess)

    await next.Invoke();
 else

    // cancel and Return 401

【问题讨论】:

【参考方案1】:

好的,所以我进一步研究了 Repo,发现了一些对我有帮助的东西:

AuthenticationMiddleware = async (context, next) =>

   var authSuccess = authenticate();
   if (authSuccess)
   
       await next.Invoke();
    else
   
      var error = new UnauthenticatedError("Some Message");
      context.Errors.Add(error);
   
       

【讨论】:

我只得到状态码,但没有正文消息。我想向客户显示消息。该怎么做? 对我来说同样的问题,上下文中没有错误属性。【参考方案2】:

你可以这样做

await ctx.HttpContext.Response.WriteAsync("'error':'Your message'");
ctx.Errors.Add(new UnauthenticatedError("Your message"));

【讨论】:

以上是关于在 Ocelot 中注入 AuthenticationMiddleware - 如何返回 401的主要内容,如果未能解决你的问题,请参考以下文章

网关Ocelot

Ocelot中使用Butterfly实践

Ocelot- 服务发现

给Ocelot做一个Docker 镜像

Ocelot简易教程之Ocelot是什么

Ocelot中文文档-Qos服务质量(转)