Как выйти из поставщиков Owin?
Я следую этому учебнику, но он не говорит вам, как выйти из системы. Я пытался сделать
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");
}
Этот метод плюс любая из трех строк, опубликованных выше
Мой результат прямо сейчас, я вхожу в систему, я иду на защищенную страницу и вижу ее, затем перехожу к своему значку, а затем после того, как вы отправили запрос, вернитесь на защищенную страницу, и я вернусь на эту защищенную страницу.
Таким образом, это на самом деле не подписало меня.
Ответы
Ответ 1
Как упоминалось в учебном пособии, используемая функция middleWare использует тип аутентификации по умолчанию, но не переопределяет ее.
Используя только параметр 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 socialIn при настройке
Ответ 2
Попробуйте настроить заголовки управления кэшем.
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, который можно отключить. Пользователь может вернуться на страницу и просмотреть, что было на предыдущей странице, но если они попытаются щелкнуть любые защищенные ссылки или обновить страницу, они будут перенаправлены для входа.
Ответ 3
Используйте атрибут [Авторизовать] для классов, для которых требуется авторизация:
[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