使用Azure AD时将用户重定向到自定义登录页

本文关键字:自定义 登录 重定向 用户 Azure AD 使用 | 更新日期: 2023-09-27 18:27:33

我正在使用以下代码示例插入Azure AD登录到我的应用程序(https://github.com/AzureADSamples/WebApp-OpenIDConnect-DotNet)。

我发现代码运行得很好,但如果用户尚未登录或会话已过期,我希望能够将用户重定向到自定义登录页面。然而,我正在努力让它发挥作用,我想知道这是否真的有可能?

是故意将用户重定向到Azure AD的Microsoft登录页面,而不是您自己的自定义页面,还是我错过了某个设置?

我已经修改了FilterConfig.cs中提供的代码,以启用Authorize筛选器属性:

filters.Add(new AuthorizeAttribute());

我还在web.config中添加了以下内容,但没有效果:

<authorization>
<allow users="?" />
</authorization>

Startup.Auth.cs文件中,我看不到任何可能对app.UseOpenIdConnectAuthentication进行的更改,以允许我设置通用登录页面,就像我可能使用基于cookie的身份验证一样。

使用Azure AD时将用户重定向到自定义登录页

在对代码进行了一些重新检查之后,我找到了问题的解决方案。

Startup.Auth.cs:内

app.UseCookieAuthentication(new CookieAuthenticationOptions {
   LoginPath = new PathString("/Account/Login")
});
app.UseOpenIdConnectAuthentication(
   new OpenIdConnectAuthenticationOptions {
      ClientId = clientId,
      Authority = authority,
      PostLogoutRedirectUri = postLogoutRedirectUri,
      AuthenticationMode = AuthenticationMode.Passive
});

它包含了AuthenticationMode = AuthenticationMode.Passive行,这似乎阻止了OpenIdConnectAuth执行到AAD登录页面的自动302重定向。

假设Azure AD是您的身份提供商,您可以自定义登录页面,但您必须运行Azure AD Premium才能自定义。

这可能是我想要的。。。

  • 本地客户端中的非交互式身份验证(https://github.com/AzureADSamples/NativeClient-Headless-DotNet)

此示例允许用户登录Azure AD,而无需使用Azure AD的基于浏览器的本机登录。

我知道这在某种程度上被认为是一种反模式,因为我将放弃Azure的内置机制来处理多因素身份验证、密码重置等,但我将保留对体验的完全控制。

===编辑====这不是我想走的路,因为我会去掉AAD提供的很多现成的东西。从本质上讲,我想保留AAD的控制流,但我只想有能力在用户未登录时控制用户登录的页面

目前的流程是:未授权->302重定向->AAD登录

我想要:未授权->302重定向->需要自助登录页面->用户登录按钮按下->302重定向->AAD登录

这就是我似乎无法理解的流程。