5

我们将 auth2.0 用于 Windows azure Active Directory 身份验证,其中身份验证在https://login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm= ...... 成功验证后我们正在重定向到我们的网站。为了注销站点,我们删除了我们站点上生成的所有 cookie 并再次重定向到 login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm=....... url,但此时我们没有得到任何登录凭据屏幕并使用访问令牌重定向到我们的网站。注销需要什么流程。因为如果我们删除所有 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"); 
       }
4

1 回答 1

2

清除您创建的 cookie 对您没有帮助,因为用户仍使用 Azure AD 登录。这就是howo Web-SSO(单点登录)的工作原理。无论您使用哪种协议对 Azure AD 进行身份验证,您仍然需要正确实施注销 - 联合注销!您可以在 Internet 上找到的任何web-sso 提供商都属于这种情况——Google、Facebook、LinkedIn、Twitter,应有尽有。

您所做的只是将用户从您的应用程序中注销,而不是从身份提供者。一旦您的应用程序将用户重定向到选定的身份提供者(在您的情况下为 AAD),如果用户与其有活动会话,则将看不到登录屏幕!

为了正确实施联合注销,您必须通读使用 Azure Active Directory 实施 SSO。您可以快进到“实施注销控制器”步骤。这将显示如下代码:

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());
} 

请通读整个部分(最好是整篇文章)以了解代码的作用以及为什么必须这样做。

于 2013-09-18T10:36:09.330 回答