C# ADAL Azure AD身份验证用户';s从不同Azure AD会话缓存的登录
我目前正在Azure上安装一个web应用程序,使用Azure Active Directory进行身份验证,几乎解决了所有问题,但还有一个问题。如果用户在点击我的登录页面之前已登录到其他目录(在本例中,这是一个大学Office 365电子邮件登录),则凭据似乎已缓存,Azure试图使用它登录到我的站点,是否有办法在每次登录时强制使用登录屏幕并避免重复使用缓存的凭据 项目设置主要是标准的ASP.NET MVC体系结构,带有默认的Azure Active Directory身份验证设置 谢谢C# ADAL Azure AD身份验证用户';s从不同Azure AD会话缓存的登录,c#,asp.net-mvc,azure,azure-active-directory,adal,C#,Asp.net Mvc,Azure,Azure Active Directory,Adal,我目前正在Azure上安装一个web应用程序,使用Azure Active Directory进行身份验证,几乎解决了所有问题,但还有一个问题。如果用户在点击我的登录页面之前已登录到其他目录(在本例中,这是一个大学Office 365电子邮件登录),则凭据似乎已缓存,Azure试图使用它登录到我的站点,是否有办法在每次登录时强制使用登录屏幕并避免重复使用缓存的凭据 项目设置主要是标准的ASP.NET MVC体系结构,带有默认的Azure Active Directory身份验证设置 谢谢 我一发
我一发布就发现了解决方案。实现了对登录方法的签出和自重定向。代码如下:
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端点。您的
权限
应该是https://login.microsoftonline.com/
。这将确保只有租户的用户才能登录。但是,如果用户尝试使用其他租户的帐户登录(通过选择现有会话或启动新会话),他们将收到您截屏显示的错误。没办法阻止
如果您想确保用户每次登录您的应用程序时都输入用户名/密码,您可以在登录请求中发送查询参数
prompt=login
。但是要意识到,这将破坏用户的SSO。您能否将错误复制/粘贴到您的问题中,而不仅仅是一个屏幕截图?底部的具体错误是,在…中不存在关于的任意蓝色圆圈。您的第二个选项更吸引人,因为在这种情况下,单点登录并不重要。您能否准确描述如何通过质询方法附加查询参数?我已经看过Owin文档好几次了,但似乎不知道该怎么做?谢谢,克雷格