Ядро dotnet не работает opeindconnect Single Logout (SLO) - PullRequest
0 голосов
/ 07 марта 2019

Итак, я установил совершенно новое приложение mvc dotnet core.Нет безопасности.Затем я добавил open id connect security при запуске так:

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        var clientId = Configuration["clientID"];
        var metadataAddress = Configuration["MetadataAddress"]; 

        var Wtrealm = Configuration["Wtrealm"];
        string signedOutCallbackPath = Configuration["SignedOutCallbackPath"];
        string postLogoutUrl = Configuration["postLogoutUrl"];

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = "Cookies";
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddCookie("Cookies")
        .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
        {
            options.SaveTokens = true;
            options.ClientId = clientId;
            options.Authority = metadataAddress;

            options.SignedOutCallbackPath = signedOutCallbackPath;


            options.Scope.Add("openid");
            options.Scope.Add("profile");
            options.Scope.Add("email");

            options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
            {
                NameClaimType = "name",
                RoleClaimType = "role",
            };

        });
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }

Это работает для входа в систему.Затем я добавил

 public async Task<IActionResult> Logout(string callBack)
    {
        return SignOut("Cookies", OpenIdConnectDefaults.AuthenticationScheme);
    }
    public async Task<IActionResult> LogoutComplete()
    {
        return View();
    }

Выход из системы, чтобы инициировать выход из системы и выход для обработки очистки после завершения выхода из системы. Выйти работает для моего приложения.Затем он перенаправляет на IdP для выхода.Он работает нормально, затем перенаправляет браузер на LogoutComplete .Вот тут и начинается странность: LogoutComplete возвращает 302 в домашний контроллер, но я не знаю почему.Он никогда не попадает в точку отладки в методе.Он не возвращает представление, для которого он предназначен.Этот метод работает нормально (возвращает свое собственное представление), когда промежуточное программное обеспечение openIdConnect не включено.Почему это происходит?Как это вообще возможно?Зачем промежуточному продукту угонять LogoutComplete?Это в спецификации?OpenIDProvider был установлен в ADFS 2016, а другой - в ID Server 4. В обоих случаях приложение работало одинаково.Так что я уверен, что это не проблема конфигурации провайдера / сервера IdP.

...