尝试将OIDC OnRedirectToIdentityProvider从302更改为401

MAD*_*D3R 1 openid-connect

我们将Identity Server 4与自定义登录页面一起使用。我们一直在测试Cookie过期或手动修改令牌(强化的一部分)时会发生什么。

该应用程序希望将我们重定向到https:// localhost:44349 / signin-oidc,并返回302重定向,但/ signin-oidc不存在。我们想抛出一个401并将其重定向到/ home。

我找到了可以捕捉事件的地方

options.Events = new OpenIdConnectEvents
    {
      OnRedirectToIdentityProvider = context => {
      var newRedirect =  context.ProtocolMessage.RedirectUri.ToString().Replace("signin-oidc", "home");
      var builder = new UriBuilder(newRedirect);
      builder.Scheme = "https";
      context.ProtocolMessage.RedirectUri = builder.ToString();
      context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
      return Task.FromResult(0);
     }
    };
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用,我们只是抛出302错误而没有任何方式向用户报告发生的情况。

MAD*_*D3R 6

在这里找到这个小宝石

OnRedirectToIdentityProvider = ctx =>
{
if (ctx.Request.Path.StartsWithSegments("/api"))
{
if (ctx.Response.StatusCode == (int)HttpStatusCode.OK)
{
ctx.Response.StatusCode = 401;
}

ctx.HandleResponse();
}

return Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)

它确实满足我的需要,即返回401。窍门在HandleResponse()中。

  • 简单地说,哇......在到达这个之前我尝试了很多解决方案(失败)。谢谢 (2认同)