как выйти из системы проверки подлинности oauth2.0 при проверке подлинности Windows Azure Active Directory

Мы используем auth2.0 для проверки подлинности Active Directory в Windows Azure, где проверка подлинности выполняется на https://login.microsoftonline.com/login.srf?wa=wsignin1.0&wtrealm= ...... и после успешной аутентификации мы перенаправляемся на наш сайт. для выхода из системы мы удаляем все файлы cookie, созданные на нашем сайте, и перенаправляем на URL-адрес 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"); 
       }

person Abhishek    schedule 18.09.2013    source источник
comment
Взгляните на эту ветку: stackoverflow.com/questions/14932241/. По сути, вам также нужно будет выйти из системы из Windows Azure Active Directory.   -  person Gaurav Mantri    schedule 18.09.2013
comment
но здесь мы используем аутентификацию oauth2.0, а не WsFederation, тогда как мы можем выйти из системы.   -  person Abhishek    schedule 18.09.2013


Ответы (1)


Очистка созданных вами файлов cookie вам не поможет, поскольку пользователь все еще вошел в систему с помощью Azure AD. Вот как работает Web-SSO (Single-Sign-On). Независимо от протокола, который вы используете для аутентификации в Azure AD, вам все равно необходимо правильно реализовать выход - федеративный выход! Так обстоит дело с любым провайдером веб-сайтов, которых вы найдете в Интернете - Google, Facebook, LinkedIn, Twitter и т. Д.

Вы просто выходите из своего приложения, а не из провайдера идентификации. После того, как ваше приложение перенаправит пользователя к выбранному провайдеру идентификации (в вашем случае AAD), если у пользователя есть активный сеанс с ним, он не будет видеть экран входа в систему!

Чтобы правильно реализовать федеративный выход, необходимо прочитать Реализация Единый вход в 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());
} 

Пожалуйста, прочтите весь раздел (а лучше всю статью), чтобы понять, что делает код и почему вам нужно идти этим путем.

person astaykov    schedule 18.09.2013
comment
мы пробовали использовать приведенный выше код, но в следующей строке получаем ошибку исключения null. SignOutRequestMessage soMessage = new SignOutRequestMessage (new Uri (fc.Issuer), wreply); // здесь мы получаем значение fc.Issuer null - person Abhishek; 18.09.2013
comment
вам нужна конфигурация wsfederation в вашем web.config. Просто не обязательно перенаправлять! - person astaykov; 18.09.2013
comment
Я добавил конфигурацию wsfederation в файл web.config, но снова получаю FederatedAuthentication.SessionAuthenticationModule.SignOut (); null и ошибка выдачи. - person Abhishek; 23.09.2013
comment
могли бы вы обновить свой вопрос, указав точный код, который вы используете (включая разделы system.identityModel и system.identityModel.services вашего web.config), точную ошибку и полную трассировку стека. Иначе мы не сможем помочь. - person astaykov; 23.09.2013
comment
Я скопировал код файла cs настроек веб-конфигурации на jsfiddle.net/JkBFe/3, пожалуйста, проверьте и дайте мне знать решение. - person Abhishek; 25.09.2013