【发布时间】:2018-03-23 01:59:58
【问题描述】:
我有一个旧的多租户 WebForms 应用程序,其中用户使用表单身份验证进行身份验证。我们正在将身份验证系统迁移到 IdentityServer4,但不能一次性完成,因此我们希望逐步将其介绍给我们的租户。这意味着我们需要同时使用 Forms Auth 和新的 OpenIdConnect Auth 运行 WebForms 应用程序。
我的问题是,每当我运行 HttpContext.Current.GetOwinContext().Authentication.Challenge() 时,我都会被重定向到 Login.aspx,因为:
<authentication mode="Forms">
<forms name="AuthCookieName" loginUrl="~/Login.aspx" timeout="60" protection="All" requireSSL="true" enableCrossAppRedirects="true" />
</authentication>
我想要的是,每当有人导航到 /OIDC.aspx 时,挑战会将用户重定向到使用 OWIN 配置的 IdentityServer。对于所有其他请求,现有的 Forms 身份验证配置可以处理身份验证。
这可能吗?
【问题讨论】:
-
你能做到吗?
-
不,我从来没有让它正常工作。我们所做的基本上是从我们的 WebForms ann 中删除整个 OWIN 管道。然后,我们在 WebForms 应用程序中创建了一个单独的 HttpHandler,我们在其中更手动地处理传入的 JWT。不完美,但它有效。
-
我们可以通过将 web.config 中的位置允许部分添加到 OKTA 登录页面来使某些东西正常工作。在我们的 webforms 项目中,我们仍然为 OWIN 注册启动类,在登录质询响应之后,我们退出 OWIN 并使用 FormsAuthentication.SetAuthCookie 自动登录用户。这避免了我们应用程序中多个身份上下文的混淆。如果您将 OWIN 与 FormsAuth 集成,SQLRoleManager 将停止工作,但是通过这种方法,我们可以不影响我们的应用程序,并且用户仍然可以通过 OKTA 进行身份验证。
-
@henningst 请问您是否需要使用 Okta.Sdk 库作为处理程序?我们仅使用 Okta.Aspnet nuget 库构建了上述解决方案,它能够处理挑战和声明等,而无需涉及令牌。但是由于多租户,我们遇到了一个问题,我们需要检查颁发者,然后发送特定的客户端 ID 和密码进行匹配。显然,我们需要实现一个授权代码流,但要找到如何使用 SDK 来实现这一点并不容易。
标签: asp.net authentication webforms openid-connect identityserver4