okta - asp.net 网络表单 - 如何防止未经授权的用户导航到安全网页?

okta - asp.net web forms - how do I prevent an unauthorized user from navigating to a secure web page?

我正在尝试将 okta 添加到一个非常旧的 ASP.Net Web Forms 应用程序。

我正在关注这个演示:https://developer.okta.com/blog/2018/08/29/secure-webforms-with-openidconnect-okta

然后我将更改集成到我的解决方案中。

但是,现在我想保护特定网页。我不希望任何人在没有经过身份验证的情况下能够导航到特定页面。如果他们确实尝试导航到安全页面,我希望将他们发送到 okta 进行登录。

我添加了下面的代码,它与上面演示中的代码类似。它似乎有效。

    if (!HttpContext.Current.Request.IsAuthenticated)
    {
        HttpContext.Current.GetOwinContext().Authentication.Challenge(
            new AuthenticationProperties { RedirectUri = "/" },
            OpenIdConnectAuthenticationDefaults.AuthenticationType);

        return;
    }

但是,我不想将此代码添加到每个页面。

过去,当我将 okta 集成到 ASP.NET MVC 应用程序中时,我会向控制器添加 [Authenticate] 属性。那会给我想要的效果。

关于如何获得 ASP.Net Web Forms 应用程序所需结果的任何建议?

一个不理想的选项是将代码放在我的母版页中。问题是我有几个母版页,所以我将不得不复制代码。

我知道 Web Forms 可以使用 Forms Authentication。然后使用以下配置强制用户进入登录页面。

<authentication mode="Forms">
      <forms loginUrl="~/Login.aspx" />
    </authentication>

但是,我没有使用表单身份验证。我正在使用 okta。

最后,我在考虑使用自定义 HttpModule / Handler。但是,当我尝试这样做时,自定义模块在 Startup.cs 之前运行。 Startup.cs 包含初始化 okta 和 owin 上下文的代码。结果,当自定义模块运行时,GetOwinContext 失败。

如有任何建议,我们将不胜感激。

@derekmckinnon 在与我公司有 okta 和 web 表单经验的开发人员讨论这个问题后,我们基本上决定做同样的事情。感谢您确认此决定。