5周前使用azure AD为我的网络应用程序实施了身份验证,但是有一些初始问题,如果用户从另一个目录(在本例中是我的大学)缓存了凭据,则登录将无法正常工作。解决方案是实现以下代码:
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 = Url.Action("Dashboard", "User", routeValues: null, protocol: Request.Url.Scheme) },
OpenIdConnectAuthenticationDefaults.AuthenticationType);
}
}
}
这实际上是强制用户注销然后立即重新登录,这个过程实际上只需要大约1.5秒,因此它似乎是一个擦除任何缓存凭据的简洁解决方案。这已经过去5周了,但突然停止了我的测试和实时系统的工作。注销将无故障地工作,但重定向回到注册网址不会启动,因此将用户挂在屏幕上的附加screenshot中。您可以查看指定的网站here,单击“登录”按钮时会出现问题。
在仔细检查源代码控制之后,我可以确认我最近对代码所做的任何更改都不会导致问题,几乎看起来好像微软处理它们的方式发生了变化。
架构:在.NET 4.5上运行的Azure Web App
提前致谢,如果我能提供更多有用的信息,请随时告诉我,
谢谢, 克雷格
答案 0 :(得分:0)
我不确定您在本地面临的问题是什么,但是当我发布到Azure时遇到问题,因为它覆盖了我的ida:受众设置。使用Kudu查看你的web.config,看看它是否仍然是你想要的。
Azure AD + ADAL.js + App Service - Only one claim on ClaimsPrincipal.Current.Claims