2015-11-24 2 views
2

Я использую Visual Studio 2015 Enterprise и ASP.NET vNext Beta8 для выпуска и использования токенов JWT, как описано here.Выход с AspNet.Security.OpenIdConnect.Server (ASP.NET vNext)

В нашей реализации мы сохраняем некоторые детали клиента в Redis при выпуске маркера, и мы хотели бы сбросить эту информацию при выходе пользователя из системы.

Мой вопрос - это то, что лучше всего подходит для выхода из системы OIDC?

Хотя я мог свернуть свой собственный контоллер для этой цели, я не мог не заметить, что Open ID Connect (OIDC) кажется несколько загрунтованным для обработки этого случая. Например, OIDC имеет обработчик OnLogoutEndpoint и LogoutEndpointPath. Но когда я вызываю URI OIDC logout, который, как представляется, обработчик принимает любую случайную форму x-www-form-urlencoded, которую я бросаю в нее и никоим образом не требую наличия токена.

Любые рекомендации относительно надлежащей практики выхода из системы OIDC будут очень оценены.

ответ

1

В AspNet.Security.OpenIdConnect.Server логика, используемая для конечной точки выхода, остается в виде упражнения.

В этом sample он реализован с использованием контроллера MVC 6, где вы, конечно же, можете добавлять пользовательскую логику для удаления кэшированных данных с сервера Redis.

[HttpPost("~/connect/logout")] 
[ValidateAntiForgeryToken] 
public async Task<IActionResult> Logout() { 
    // When invoked, the logout endpoint might receive an unauthenticated request if the server cookie has expired. 
    // When the client application sends an id_token_hint parameter, the corresponding identity can be retrieved using AuthenticateAsync. 
    var identity = await HttpContext.Authentication.AuthenticateAsync(OpenIdConnectServerDefaults.AuthenticationScheme); 

    // Remove the cached details here. If you need to determine 
    // who's the authenticated user, you can use the identity variable. 

    // Remove the authentication cookie and return the user to the client application. 
    return SignOut("ServerCookie", OpenIdConnectServerDefaults.AuthenticationScheme); 
} 

Вы также можете сделать что-то подобное непосредственно из LogoutEndpoint события. Не забудьте позвонить context.HandleResponse(), чтобы убедиться, что запрос не перехвачен другим промежуточным программным обеспечением.

+0

спасибо - просто из любопытства, если я использую событие LogoutEndpoint, почему это событие в конечной точке ожидает форму или, что более важно, то, что ожидается в этой форме? – 42vogons

+0

Использование запроса POST/формы не является обязательным, вы также можете использовать один запрос GET. Я использовал форму здесь, потому что я хотел добавить поддержку анти-XSRF к конечной точке выхода, чтобы предотвратить нежелательный выход из системы (синдром «суперлогаут»). В качестве альтернативы вы также можете использовать 'id_token_hint' для этого: https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/issues/99#issuecomment-118515272 – Pinpoint

+0

(FYI: начиная со следующей беты, мы По умолчанию перестают использовать токены доступа JWT и возвращаются к непрозрачным маркерам. Для получения дополнительной информации см. https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/issues/185) – Pinpoint

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