Ошибка прямого доступа к странице входа в систему с корреляцией - как перенаправить? - PullRequest
0 голосов
/ 24 сентября 2018

При настройке ядра asp.net с AddOpenIdConnect он создает по умолчанию страницу /signin-oidc, которая отлично работает при доступе от провайдера opeind.Пользователь вошел в систему и все работает нормально.

Хотя пользователь все еще может попытаться получить доступ к mypage.com/signin-oidc напрямую и получить в результате Correlation failed сбойную ошибку.

Как правильно обработать доступ кэта страница, чтобы она все еще работала для потока openid, но не выдает ошибку (перенаправления) при прямом доступе?(попытался переписать Route с помощью HttpGet уже)

EDIT Чтобы уточнить, переход к /signin-oidc дает статус 500 с базовым запуском, как

`` `

public void ConfigureServices(IServiceCollection services)
    {
        services.AddOptions();
        services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            }).AddCookie()
            .AddOpenIdConnect(options =>
            {
                options.ClientId = "test";
                options.ClientSecret = Environment.GetEnvironmentVariable("ClientSecret");
                options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;

                options.Authority = "https://test.net";
                options.ResponseType = "code";
                options.Scope.Add("openid");

                options.GetClaimsFromUserInfoEndpoint = true;
                options.SaveTokens = true;
                options.Events = new OpenIdConnectEvents
                {
                    OnTokenValidated = async ctx =>
                    {

                        var claims = new List<Claim>();
                       claims.Add(new Claim("jwt", ctx.SecurityToken.ToString()));
                        var appIdentity = new ClaimsIdentity(claims);                           
                        ctx.Principal.AddIdentity(appIdentity);
                    }
                };
            }).AddJwtBearer(options =>
            {
                options.Authority = "https://test.net";
                options.Audience = "authorization.sample.api";
                options.IncludeErrorDetails = true;
            });

        services.AddMvc();
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info
            {
                Version = "v1",
                Title = "Test API"
            });
        });
    }
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseStaticFiles(new StaticFileOptions
        {
            FileProvider = new PhysicalFileProvider(
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wwwroot")),
            RequestPath = "/dist"
        });


        app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
        });

        app.Use(async (context, next) =>
        {
            if (context.Request.Host.Host.ToLower() != "localhost")
                context.Request.Scheme = "https";
            await next.Invoke();
        });

        app.UseAuthentication();
        app.UseMvc(routes =>
        {
            routes.MapRoute("default", "{controller=Home}/{action=LandingPage}/{id?}");
            routes.MapRoute("Spa", "{*url}", defaults: new { controller = "Home", action = "Index" });
        });



        var swaggerJsonEndpoint = "api-docs/{0}/swagger.json";

        app.UseSwagger(so => so.RouteTemplate = string.Format(CultureInfo.InvariantCulture, swaggerJsonEndpoint, "{documentName}"));

        app.UseSwaggerUI(c =>
        {
            c.RoutePrefix = "api-docs";
            c.SwaggerEndpoint("/" + string.Format(CultureInfo.InvariantCulture, swaggerJsonEndpoint, "v1"), "Test API v1");
            c.OAuthClientId("admin.implicit");
        });

    }

`` `

1 Ответ

0 голосов
/ 27 сентября 2018

Это случалось и со мной ранее, и я думаю, что это просто артефакт работы системы OpenId в ASP.NET Core.Я думаю, что для этого была проблема с Github, но я не могу найти его в банкомате.Я осмотрюсь и опубликую его, если смогу его найти.

В любом случае, я смог исправить это, добавив событие в события опций OpenId, которое просто перенаправляет на «Домой» влюбые ошибки удаления:

options.Events = new OpenIdConnectEvents {
    // Your events here
    OnRemoteFailure = ctx => {
        ctx.HandleResponse();
        ctx.Response.Redirect("Home");
        return Task.FromResult(0);
    }
};

Проверьте, работает ли это для вас ...

РЕДАКТИРОВАТЬ: Это проблема и комментарий с предлагаемым исправлением для справки https://github.com/IdentityServer/IdentityServer4/issues/720#issuecomment-368484827

...