OWIN OpenID Connect автоматически входит в систему непреднамеренно, используя тип аутентификации "openID" - PullRequest
0 голосов
/ 27 февраля 2019

Справочная информация:

  1. Мое приложение имеет собственную базовую систему входа в систему (информация пользователя сохранена в дБ)
  2. Теперь я хочу добавить функцию единого входа Microsoft, используя рабочий процесс OpenID connect и использую Microsoft в качестве поставщика аутентификации.

  3. Мне также нужна функция единого выхода, поэтому я регистрирую logout url для приложения в Azure.

Пользовательский опыт:

  1. Если пользователь входит в систему с помощью единого входа Microsoft, при выходе он / она активирует единый выход, при котором пользователь выходит из системы.из всех его / ее подписанных в приложении Microsoft - идеально
  2. Если пользователь выполняет вход не через единый вход Microsoft, а просто обычным способом, когда нажимается кнопка «Выход», единый выход такжесработало - сбивает с толку

My startup.cs

     app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                RedirectUri = redirectUri,
                Authority = Authority,
                Notifications =
                    new OpenIdConnectAuthenticationNotifications
                    {
                        AuthorizationCodeReceived = OwinStartup.AuthorizationCodeRecieved,
                        AuthenticationFailed = OwinStartup.AuthenticationFailed,
                        RedirectToIdentityProvider = OwinStartup.RedirectToIdentityProvider,
                        SecurityTokenValidated = OwinStartup.SecurityTokenValidated,
                    },
            });

Код срабатывает при нажатии кнопки выхода из системы:

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

Причина, по которой я считаюпоскольку OpenID authenticationType регистрируется в автозагрузке, независимо от того,позже пользователь будет использовать какой метод для входа, поэтому выход из системы всегда будет вызывать единый выход. (выход выполняется для всех доступных типов)

Я не знаю, как не запускать единый выход припользователь не вошел в систему через Microsoft, я попытался закомментировать PostLogoutRedirectUri, но это не сработало.Текущий обходной путь - это не выход из типа аутентификации openID.Но я чувствую, что эта работа не правильная.

        var authTypes = Request.GetOwinContext().Authentication.GetAuthenticationTypes().Select(o => o.AuthenticationType);
        var authTypesExceptOpenId = authTypes.Where(a => a != "OpenIdConnect").ToArray();
        Request.GetOwinContext().Authentication.SignOut(authTypesExceptOpenId );
...