【问题标题】:ASP.NET Core giving me Code 500 on Forbid()ASP.NET Core 在 Forbid() 上给我代码 500
【发布时间】:2017-11-19 16:40:13
【问题描述】:

我试图解决这个问题已经好几个小时了,但我找不到任何东西。基本上我有一个简单的控制器,大致如下所示:

[Route("v1/lists")]
public class ListController : Controller
{
    ...

    [HttpPost("{id}/invite")]
    public async Task<IActionResult> PostInvite([FromBody] string inviteSecret, [FromRoute] int id, [FromQuery] string userSecret)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        List list = await context.Lists.SingleOrDefaultAsync(l => l.ID == id);
        if (list == null)
        {
            return NotFound();
        }

        User postingUser = await context.Users.SingleOrDefaultAsync(u => u.ID == list.CreationUserID);
        if (postingUser == null || postingUser.Secret != userSecret)
        {
            return Forbid();
        }

        await context.ListInvites.AddAsync(new ListInvite{ListID = id, InviteSecret = inviteSecret});
        await context.SaveChangesAsync();
        return Ok();
    }

    ....
}

问题是:每当调用此方法并通过 return Forbid(); 退出时,Kestrel 会随后抛出 InvalidOperationException 并显示消息

没有配置身份验证处理程序来处理该方案:自动

(当然服务器返回 500)。奇怪的是,我没有在任何地方进行任何身份验证,并且它不会发生,例如如果方法离开return Ok();。在这一点上我真的很迷茫,因为如果你尝试用谷歌搜索这个问题,你会得到解决方案而不是解决方案......对于那些实际上进行身份验证并且有问题的人。我真的希望这里有人知道如何解决这个问题和/或我可以做些什么来找出发生这种情况的原因。

【问题讨论】:

    标签: c# asp.net asp.net-web-api web asp.net-core


    【解决方案1】:

    SignInSignOutChallengeForbid 依赖于身份验证堆栈来决定返回“禁止”响应的正确方法:一些身份验证处理程序(如 JWT 承载中间件)返回一个403 响应,而其他(如 cookie 中间件)更喜欢将用户重定向到“拒绝访问页面”。

    如果您的管道中没有任何身份验证处理程序,则不能使用此方法。请改用return StatusCode(403)

    【讨论】:

    • 但它一直有效到今天。这个错误就在今天出现,我当然没有改变我的管道上的任何东西。除此之外,403(401 除外)不应该依赖于身份验证机制,恕我直言
    • 你肯定改变了一些东西(否则你看到的异常不会神奇地出现)。值得注意的是,IIS 集成助手 (UseIISIntegration()) 和 WebListener 主机都注册了默认身份验证处理程序。你改了吗?
    • 我在开发时从使用 IIS 集成更改为仅使用 Kestrel 独立,但该项目也通过 Kestrel 独立在 Linux AWS 实例上运行,我可以向您保证,我肯定得到了 403就在昨天。
    • 我向您保证,如果您的管道中没有注册处理程序,Forbid 将无法工作。如果您不信任我,请随意查看源代码。
    • @thegentlecat 你最终会归结为这行代码:github.com/aspnet/HttpAbstractions/blob/… ... OSS 不是很棒!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多