Identity Server 4: правильный выход из клиента MVC - PullRequest
0 голосов
/ 30 ноября 2018

У меня проблемы с функцией выхода из системы в IdentityServer 4. Мое приложение IS4 в основном является результатом учебного пособия на их веб-сайте, поэтому его поведение на самом деле не настраивается.Я также использую ASP.net Core Identity.У меня есть клиент MVC (опять же, в основном шаблон проекта).Я просто добавил кнопку «Выйти» в верхней части страницы указателя, чтобы выйти из текущего аутентифицированного пользователя.

Это метод выхода из системы в моем клиенте MVC:

public async Task Logout()
{
    await HttpContext.SignOutAsync("Cookies");
    await HttpContext.SignOutAsync("oidc");
}

В точности так, как говорится в руководстве.

Это конфигурация в Startup.cs клиента MVC:

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
    options.SignInScheme = "Cookies";

    options.Authority = "http://localhost:5000";
    options.RequireHttpsMetadata = false;
    options.CallbackPath = new PathString("/Home/");

    options.ClientId = "Core.WebUI";
    options.ClientSecret = "secret";
    options.ResponseType = "code id_token";

    options.SaveTokens = true;
    options.GetClaimsFromUserInfoEndpoint = true;

    options.Scope.Add("offline_access");                    
});

Ничего особенного ... Теперь конфигурация клиента MVC в приложении IS4:

new Client
{
    ClientId = "Core.WebUI",
    ClientName = "MVC Client",
    ClientSecrets = new List<Secret>
    {
        new Secret("secret".Sha256())
    },
    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
    RequireConsent = false,

    // where to redirect to after login
    RedirectUris = { "http://localhost:5011/Home/" },

    // where to redirect to after logout
    PostLogoutRedirectUris = { "http://localhost:5011/Home/" },
    AlwaysSendClientClaims = true,
    AlwaysIncludeUserClaimsInIdToken = true,
    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile
    },
    AllowOfflineAccess = true
}

Опять же, в основном то, что говорится в учебнике.Моя проблема: когда пользователь подключен, а затем я нажимаю кнопку выхода из системы, я перенаправляюсь в приложение IS4 на странице выхода, сообщая, что я вышел из системы.Но на самом деле это не так, потому что, если я вернусь к своему MVC, я все равно смогу получить доступ к защищенным функциям (с атрибутом Authorize).Чтобы правильно выйти из системы, когда я нахожусь на странице выхода из моего приложения D4, мне нужно нажать на кнопку выхода из приложения IS4 ... И только тогда я правильно выхожу из системы ...

Я хочу, чтобы при нажатии кнопки «Выход» на клиенте MVC я был ДЕЙСТВИТЕЛЬНО вышел из системы и был перенаправлен на домашнюю страницу клиента MVC (без сообщения «Вы вышли из системы»)страница)

Я довольно новичок в IS4 и ADP.NET, поэтому любая помощь приветствуется ... Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вот как я решил это:

    public IActionResult LogOff()
    {
        return new SignOutResult(new[] { "oidc", "Cookies" });
    }
0 голосов
/ 30 ноября 2018

Вы пробовали с

public async Task<IActionResult> Logout()
{
   await _signInManager.SignOutAsync();
   return View("Logout"); // or whatever url Redirect("http://localhost:5011/Home/")
}
...