WSFederation ADFS петля входа в систему .Net Core 2.1 - PullRequest
0 голосов
/ 06 ноября 2018

При входе в ADFS (в Premise) меня перенаправляют после того, как я ввожу свои учетные данные, и в итоге происходит ошибка с подробностями исключения: Microsoft.IdentityServer.Web.InvalidRequestException: MSIS7042: тот же сеанс браузера клиента, который был выполнен «6» запросов за последние «7» секунд. За подробностями обращайтесь к администратору в Event Viewer. Я воспользовался предложением переполнения стека ( ссылка ), но не смог решить проблему. Я бегу по https и убедился, что сертификат правильный.

Вот мой код

namespace TestApp
{
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
    private static string HtmlEncode(string content) =>
        string.IsNullOrEmpty(content) ? string.Empty : HtmlEncoder.Default.Encode(content);

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {

        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => false;
            options.MinimumSameSitePolicy = SameSiteMode.None;
            options.Secure = CookieSecurePolicy.SameAsRequest;
        });

        services.AddAuthentication(sharedOptions =>
        {
            sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
        })
            .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
                options =>
                {
                    options.Cookie.Name = ".AspNet.SharedCookie";
                    options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
                    options.Cookie.SameSite = SameSiteMode.None;
                })
            .AddWsFederation(options =>
            {
                options.MetadataAddress =
                    $"https://adfsdomain/FederationMetadata/2007-06/FederationMetadata.xml";
                options.Wtrealm = "urn:apptest";
                options.Wreply = "https://appdomain/apptest";
                options.CallbackPath = "/apptest";
                options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidIssuer = "https://adfsdomain/adfs/services/trust/"
                };
                options.SaveTokens = true;
                options.RequireHttpsMetadata = false;
            });

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();


        services.AddMvc();//.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);


    }

    // 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");
            app.UseHsts();
        }
        app.UseCors(policy => policy.SetIsOriginAllowed(origin => origin == "https://adfsdomain"));
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.Use(async (context, next) =>
        {
            if (!context.User.Identity.IsAuthenticated)
            {
                await context.ChallengeAsync(WsFederationDefaults.AuthenticationScheme);
            }
            else
            {
                await next();
            }
        });

        app.UseCookiePolicy();
        app.UseAuthentication();

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

}

Я использую .Net Core 2.1 и ADFS 3.0. Если я возьму приложение ASP.NET MVC и опубликую его с той же настройкой adfs, мой код будет работать как charm, что говорит мне о том, что конфигурация в ADFS была настроена правильно.

...