Как выйти из провайдеров Owin?

c# asp.net-mvc-5 owin

9866 просмотра

3 ответа

32695 Репутация автора

Я следую этому уроку, но он не говорит вам, как выйти из системы. Я пытался сделать

Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie);

Request.GetOwinContext().Authentication.SignOut()

          Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);

Вы можете получить образец кода здесь: https://github.com/AndersAbel/SocialLoginWithoutIdentity

Просто нужно добавить еще одно действие

public ActionResult SignOut()
 {
       Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie);
       return RedirectToAction("Index", "Home");
 }

Этот метод плюс любая из 3 строк, которые я написал выше

Мой результат прямо сейчас, я вхожу, я захожу на защищенную страницу и вижу ее, затем я перехожу к своему выходу из системы и затем после выхода пытаюсь вернуться на защищенную страницу, и мне разрешают вернуться на эту защищенную страницу.

Так что на самом деле это не совсем меня вышло.

Автор: chobo2 Источник Размещён: 18.07.2016 10:14

Ответы (3)


0 плюса

1378 Репутация автора

Используйте атрибут [Authorize] для классов, которым требуется авторизация:

 [Authorize]
public class MeController : ApiController
{
    // GET api/<controller>
    public IEnumerable<object> Get()
    {
        var identity = User.Identity as ClaimsIdentity;
        return identity.Claims.Select(c => new
        {
            Type = c.Type,
            Value = c.Value
        });
    }
}

источник: http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

Автор: Jeroen Doppenberg Размещён: 21.07.2016 07:47

4 плюса

142648 Репутация автора

Попробуйте установить заголовки управления кешем.

public ActionResult SignOut() {
    var authenticationTypes = new string[] {
        DefaultAuthenticationTypes.ApplicationCookie,  
        DefaultAuthenticationTypes.ExternalCookie 
    };
    AuthenticationManager.SignOut(authenticationTypes);
    // HACK: Prevent user from being able to go back to a logged in page once logged out
    Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetNoStore();
    // now redirect
    return RedirectToAction("Index", "Home");    
}

private IAuthenticationManager AuthenticationManager {
    get {
        return Request.GetOwinContext().Authentication;
    }
}

Пользователь не сможет остановить нажатие кнопки «Назад» в браузере, если вы не попробуете JavaScript, который можно отключить. Пользователь может вернуться на страницу и посмотреть, что было на предыдущей странице, но если он попытается щелкнуть по любой защищенной ссылке или обновить страницу, он будет перенаправлен для входа в систему.

Автор: Nkosi Размещён: 22.07.2016 07:44

18 плюса

540 Репутация автора

Решение

Как упомянуто в руководстве, используемое промежуточное ПО использует тип аутентификации по умолчанию, но не переопределяет его.

Используя только externalCookie в качестве параметра для Owin, вы очищаете cookie для Asp, но не тот, который используется для хранения провайдера Google ,

для этого вам необходимо получить массив всех текущих файлов cookie. Это можно сделать таким простым способом:

Request.GetOwinContext()
       .Authentication
       .SignOut(HttpContext.GetOwinContext()
                           .Authentication.GetAuthenticationTypes()
                           .Select(o => o.AuthenticationType).ToArray());

Вот где сказано в Учебном пособии :

Вызов UseGoogleAuthentication должен быть совершенно очевидным, зачем он нужен.

Но первый toSetDefaultSignInAsAuthenticationType не так очевиден. Промежуточное ПО для входа в систему обычно использует внешнее промежуточное ПО для файлов cookie, зарегистрированное до промежуточного программного обеспечения для входа в систему. внешнее промежуточное программное обеспечение cookie, оно устанавливает себя как тип входа по умолчанию. Таким образом, промежуточное ПО для входа в социальную сеть знает, что оно должно использовать внешний файл cookie. В этой настройке нет внешнего cookie, поэтому мы должны вручную установить основное промежуточное программное обеспечение cookie в качестве типа входа по умолчанию. Промежуточное программное обеспечение cookie будет выдавать cookie только в том случае, если тип AuthenticationType совпадает с идентификатором в удостоверении, созданном промежуточным программным обеспечением для входа в социальную сеть. Поиск в конвейере внешней аутентификации owin a socialIn при настройке

Автор: GaelSa Размещён: 25.07.2016 12:13
Вопросы из категории :
32x32