从不同的 Azure AD 会话缓存的 ADAL Azure AD 身份验证用户的登录名



我目前正在使用Azure Active Directory进行身份验证,建立一个托管在Azure上的web应用程序,几乎解决了所有的问题,但仍然存在一个问题。如果用户在点击我的登录页面之前登录到不同的目录(在这种情况下,它是一个University Office 365的电子邮件登录),凭证似乎是缓存的,Azure试图使用它登录到我的网站,是否有一种方法可以在每次登录时强制登录屏幕,并避免重复使用缓存的凭证?

项目设置主要是标准的,ASP。. NET MVC架构与默认的Azure Active Directory身份验证设置。

谢谢!

出现错误的MS登录页面截图

我一发帖就发现了解决方案。实现了一个注销和自重定向到登录方法。代码如下:

  public void SignIn(bool? signedOut)
    {
        // Send an OpenID Connect sign-in request.
        if (!Request.IsAuthenticated)
        {
            // If the user is currently logged into another directory, log them out then attempt to
            // reauthenticate under this directory
            if (signedOut == null || signedOut == false)
            {
                HttpContext.GetOwinContext().Authentication.SignOut(
            new AuthenticationProperties { RedirectUri = Url.Action("SignIn", "Account", routeValues: new { signedOut = true }, protocol: Request.Url.Scheme) },
            OpenIdConnectAuthenticationDefaults.AuthenticationType, CookieAuthenticationDefaults.AuthenticationType);
            }
            else
            {
                HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties { RedirectUri = "/" },
                    OpenIdConnectAuthenticationDefaults.AuthenticationType);
            }
        }
    }

谢谢!

有两种更好的方法来处理这个问题。首先,为您的应用程序使用特定于租户的Azure AD端点。您的authority应该是https://login.microsoftonline.com/<name-of-your-tenant>。这将确保只有来自您的租户的用户可以登录。但是,如果用户尝试使用不同租户的帐户登录(通过选择现有会话或启动新会话),他们将收到您截屏的错误。这是无法避免的。

如果你想确保用户每次登录你的应用程序时都输入他们的用户名/密码,你可以在登录请求中发送查询参数prompt=login。但是要注意,这将破坏用户的SSO。

相关内容

  • 没有找到相关文章

最新更新