Перенаправление контроллера через запуск OWIN - PullRequest
0 голосов
/ 19 октября 2018

Я не являюсь разработчиком .net и получил задачу применить SSO в существующем приложении .net.Я добавил OWIN OpenIDConnect для единого входа.Мой проект не является проектом MVC.Теперь мой звонок проходит через Startup.cs во время запуска сервера iisexpress.Но моя страница входа (login.aspx) вызывается с /login.aspx.Я хочу позвонить автозагрузке, когда я вызываю кнопку отправки на странице входа.Звонок не проходит через автозагрузку.Мой метод ConfigureAuth -

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(Microsoft.Owin.Security.Cookies.CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new Microsoft.Owin.Security.Cookies.CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/login.ashx")
    });
    app.UseOpenIdConnectAuthentication(
        new OpenIdConnectAuthenticationOptions
        {
            Authority = "Authority",
            ClientId = "ClientId",
            RequireHttpsMetadata = false,
            ClientSecret = "ClientSecret",
            Scope = OpenIdConnectScope.OpenIdProfile,
            ResponseType = OpenIdConnectResponseType.CodeIdToken,
            AuthenticationMode = AuthenticationMode.Active,
            Notifications = new OpenIdConnectAuthenticationNotifications()
            {
                RedirectToIdentityProvider = (context) =>
                {
                    //I'm able to break into this method
                    return Task.FromResult(0);
                },
                MessageReceived = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
                SecurityTokenReceived = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
                SecurityTokenValidated = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
                AuthorizationCodeReceived = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
                AuthenticationFailed = (context) =>
                {
                    //doesn't seem to run this line
                    return Task.FromResult(0);
                },
            }
         });

    System.Console.WriteLine("After OpenIdconfiguration");
}

Пожалуйста, предложите, как я могу перенаправить вызов контроллера через класс запуска.

Спасибо

1 Ответ

0 голосов
/ 24 октября 2018

Краткий ответ: большая часть кода не будет выполнена напрямую.Это события, которые выполняются как часть процесса аутентификации.

Более длинный ответ заключается в том, что вам необходимо заполнить пробелы в отношении того, что должно фактически происходить для каждого из этих событий.Немного информации о OWIN может помочь.

Я думаю о OWIN как о конвейере, который ведет к вашему приложению.Запрос проходит через конвейер, прежде чем он достигнет вашего приложения.Когда ваше приложение отправляет ответ, этот конвейер используется снова.Кроме того, существуют компоненты, называемые «промежуточным программным обеспечением», которые могут воздействовать на запрос и ответ.Используя модель конвейера, представьте промежуточное ПО как клапаны в конвейере.Промежуточное программное обеспечение выполняется по порядку при входе и в обратном порядке при выходе.

Итак, вернемся к вашему коду.Эта строка:

app.UseOpenIdConnectAuthentication(

Указывает OWIN использовать OpenIdConnect для аутентификации.Вам необходимо написать код для каждого из событий, которые являются частью процесса OpenIdConnect.Первый RedirectToIdentityProvider необходимо перенаправить (возможно, с http 302) вашему провайдеру идентификации, который может быть чем-то вроде ForgeRock или PingIdentity или IdentityServer.Каждое из этих событий нуждается в коде, написанном для них.

Вся тема OpenIdConnect довольно обширна и более чем немного сложна, вероятно, больше, чем то, что я реально могла бы сделать в ответе.Но есть много ресурсов по этой теме.

Надеюсь, это поможет

...