【发布时间】:2019-08-15 21:00:06
【问题描述】:
我正在尝试将 okta 添加到一个非常旧的 ASP.Net Web 表单应用程序中。
我正在关注这个演示: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;
}
但是,我不想将此代码添加到每个页面。
过去当我在 ASP.NET MVC 应用程序中集成 okta 时,我会将 [Authenticate] 属性添加到控制器。那会给我想要的效果。
关于如何为 ASP.Net Web 表单应用程序获得所需结果的任何建议?
一个不太理想的选项是将代码放在我的母版页中。问题是我有几个母版页,所以我必须复制代码。
我知道 Web 表单可以使用表单身份验证。然后使用以下配置强制用户进入登录页面。
<authentication mode="Forms">
<forms loginUrl="~/Login.aspx" />
</authentication>
但是,我没有使用表单身份验证。我正在使用okta。
最后,我在考虑使用自定义的 HttpModule / Handler。但是,当我尝试这样做时,自定义模块在 Startup.cs 之前运行。 Startup.cs 包含初始化 okta 和 owin 上下文的代码。结果,当自定义模块运行时,GetOwinContext 失败。
任何建议将不胜感激。
【问题讨论】:
-
我之前所做的是创建多个 MasterPage:一个用于基本布局,一个用于经过身份验证的页面,还可能一个用于匿名用户,具体取决于您的需要。然后在授权页面的 MasterPage 中,将该代码块添加到
Page_Load()方法中。 -
@derekmckinnon 在与我公司的一位具有 okta 和 Web 表单经验的开发人员讨论了这个问题后,我们基本上决定做同样的事情。感谢您确认此决定。