2015-09-08 5 views
0

У меня есть обычное промежуточное программное обеспечение для аутентификации, работающее для единого входа. Мне интересно, как мне следует реализовать одно решение для выхода из системы.Owin Authentication Single Sign-Out

Мне нужно позвонить Authentication.Signout(), чтобы вывести сообщение из моего приложения, но затем мне нужно перенаправить пользователя на конечную точку выхода нашей пользовательской STS. Где я должен справиться с этим? Invoke? ApplyResponseGrant? Не в обработчике вообще, а просто в ручном перенаправлении?

Редактировать: Это приложение MVC. У меня есть все, что работает. ИСКЛЮЧЕНИЕ связывает локальный выход из системы STS. Добавление моего существующего кода здесь не приведет к запутыванию моего вопроса, IMO. Если есть конкретный фрагмент кода, который поможет, сообщите мне, и я добавлю его.

В идеале, мне бы хотелось, чтобы какое-то событие или флаг указывали на то, что пользователь выйдет из системы, а затем измените ответ на 302 на внешний выход. Если я поместил этот код в ApplyResponseGrant, у меня возникло ощущение, что это предотвратит очистку промежуточного программного обеспечения CookieAuthentication файла cookie auth. Если я поместил этот код в действие контроллера Logout (после вызова Authentication.SignOut()), я оставляю его для каждого приложения для обработки одного знака.

+0

Это MVC или приложение WebApi? –

+0

Посмотрите на это [сообщение в блоге о 'OWIN Authentication'.] (Http://weblog.west-wind.com/posts/2015/Apr/29/Adding-minimal-OWIN-Identity-Authentication-to-an -Existing-ASPNET-MVC-приложения). Он охватывает MVC, но большинство концепций вы должны соблюдать, даже если вы создаете приложение WebApi. –

+0

Кроме того, при размещении вопросов на SO вы должны предоставить как минимум код, чтобы понять, как вы это сделали. Код всегда более краткий, чем слова :) –

ответ

0

У меня это работает. Вот что я сделал.

В моем AccountController, я добавил Logout действие, которое возвращает Redirect("/signout-custom").

В моем обработчике OWIN я просматриваю этот URL-адрес в методе Invoke, вызываю удаленную конечную точку удаленного доступа, метод локального выхода и останавливает обработку OWIN.

public override async Task<bool> InvokeAsync() { 
    //other code 

    if (Request.Path == Options.LogoutCallbackPath) { 
     Context.Authentication.SignOut(Options.AuthenticationType); 
     Response.Redirect(WebUtilities.AddQueryString(Options.ClauthLogoutUri, "returnUrl", "http://localhost:62506/Home/About")); 
     return true; 
    } 

    //other code 

} 

Перенаправление не прерывает поток Owin, поэтому CookieAuthentication промежуточного слоя до сих пор работает и очищает локальный аутентификации печенье, как это должно быть.

+0

Как вы справитесь с Timout? –

+0

Это будет до клиентского приложения. В этом случае мы используем стандартные тайм-ауты cookie. – Spivonious

Смежные вопросы