我们正在使用auth2.0进行Windows azure活动目录身份验证,其中在https://login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm=上执行身份验证......并且在成功进行身份验证后,我们将重定向到我们的站点。 要注销该网站,我们会删除在我们网站上生成的所有Cookie,并再次重定向到login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm = .......网址,但此时我们是没有获得任何登录凭据屏幕和 使用访问令牌重定向到我们的网站。注销需要什么过程。因为如果我们删除所有cookie或关闭浏览器并重新打开网站工作并将我们重定向到login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm = ........ url。
我们正在使用以下代码进行注销过程
[NoCacheAttribute]
public ActionResult LogOut()
{
UserCookieWrapper.delete_UserCookieWrapper();
//This function delete all the datamemeber of the UserCookieWrapper class
string[] theCookies =
System.IO.Directory.GetFiles(Environment.GetFolderPath(
Environment.SpecialFolder.Cookies));
foreach(string currentFile in theCookies)
{
try
{
System.IO.File.Delete(currentFile);
}
catch(Exception objEx) { }
}
Response.Clear();
return RedirectToAction("Index", "Login");
}
答案 0 :(得分:2)
清除您创建的Cookie对您没有帮助,因为用户仍然使用Azure AD登录。这是Web-SSO(单点登录)的工作原理。无论您使用Azure AD进行身份验证的协议如何,您仍需要正确实施注销 - 联合注销!您可以在互联网上找到任何 web-sso提供商,例如谷歌,Facebook,LinkedIn,Twitter等。
您所做的只是将用户从您的应用程序中签名,而不是从身份提供商处签名。一旦您的应用程序将用户重定向到选定的身份提供者(在您的情况下是AAD),如果用户有一个活动会话,那么将无法看到登录屏幕!
为了正确实施联合注销,您必须通读Implementing SSO with Azure Active Directory。您可以快进到“实施注销控制器”步骤。这将显示如下代码:
public void SignOut()
{
WsFederationConfiguration fc =
FederatedAuthentication.FederationConfiguration.WsFederationConfiguration;
string request = System.Web.HttpContext.Current.Request.Url.ToString();
string wreply = request.Substring(0, request.Length - 7);
SignOutRequestMessage soMessage =
new SignOutRequestMessage(new Uri(fc.Issuer), wreply);
soMessage.SetParameter("wtrealm", fc.Realm);
FederatedAuthentication.SessionAuthenticationModule.SignOut();
Response.Redirect(soMessage.WriteQueryString());
}
请仔细阅读整个部分(更好的整篇文章),了解代码的作用以及为什么必须采用这种方式。