signin-oid c flow выдает 500 в chrome, но не IE - PullRequest
0 голосов
/ 04 августа 2020

У меня есть веб-приложение netcoreapp2.1, которое вызывает проблему в Google Chrome, но не в Edge или IE во время перенаправления OIDC flow. Он просто останавливается на http://localhost:5000/signin-oidc с полученным ответом:

Общие:

Request URL: http://localhost:5000/signin-oidc
Request Method: POST
Status Code: 500 Internal Server Error
Remote Address: [::1]:5000
Referrer Policy: no-referrer-when-downgrade

Заголовки ответов:

Content-Length: 0
Date: Tue, 04 Aug 2020 09:49:32 GMT
Server: Kestrel

Заголовки запроса:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 2148
Content-Type: application/x-www-form-urlencoded
Host: localhost:5000
Origin: null
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36

Данные формы:

code: Ry9Pec...rdG1U0SB
scopes: resource.WRITE+openid+resource.READ
state: CfDJ8JZ...oESbUvQ
id_token: eyJhbG...9sXMEhs

Когда я посещаю localhost: 5000 в chrome ( инкогнито или нет) код никогда не достигает события OnTicketReceived, тогда как при запуске из IE Edge et c это происходит и продолжается нормально.

Это класс запуска:

public class Startup
{
    private AppSettings _appSettings;
    private IConfiguration _config;

    public Startup(IConfiguration configuration)
    {
        _config = configuration;
        _appSettings = _config.Get<AppSettings>();
    }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        
        services.Configure<AppSettings>(_config);

        services.AddSingleton<IAPIRepository, APIRepository>();
        services.AddSingleton<IUserRepository, UserRepository>();
        services.AddSingleton<INavigationRepository, NavigationRepository>();

        services.UseOpenIDConnectMiddleware(new OpenIDConnectMiddlewareOptions
        {
            BaseUrl = _appSettings.API.BaseUrl,
            AppName = _appSettings.AppName,
            ClientId = _appSettings.API.ClientId,
            ClientSecret = _appSettings.API.ClientSecret,
            Secure = !_appSettings.Local
        });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseAuthentication();
        
        if (!_appSettings.Local)
        {
            app.UseGlobalLoginMiddleware();
        }

        if (_appSettings.FeatureFlags["ProcessRedirectionRules"])
        {
          app.UseRedirectUserMiddleware(_appSettings.RedirectionRules);
        }
        
        app.UseMvc();
        app.UseProtectHTMLRouteMiddleware();

        if (_appSettings.Local)
        {
            app.UseDeveloperExceptionPage();

            app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
                ProjectPath = Path.Join(Directory.GetCurrentDirectory(), "../UI"),
                ConfigFile = "node_modules/@vue/cli-service/webpack.config.js",
                HotModuleReplacement = true
            });
        }
        else
        {
            app.UseDefaultFiles();
            app.UseStaticFiles();
        }

        app.UseJavascriptVarMiddleware(new JavascriptSettingsMiddlewareOptions 
        {
            FileName = "env.js",
            ObjectName = "__env",
            Settings = new Dictionary<string, string> 
            {
                { "insightsKey", _appSettings.ApplicationInsights.InstrumentationKey },
                { "environment", _appSettings.Environment },
                { "gatekeeperBaseUrl", _appSettings.Gatekeeper.BaseUrl }
            }
        });

        app.UseGlobalSignoutMiddleware(new GlobalSignoutMiddlewareOptions 
        {
            GatekeeperLogoutUrl = _appSettings.API.LogoutUrl
        });

        app.UseHTMLRouteFallback(new HTMLRouteFallbackMiddlewareOptions 
        {
            Local = _appSettings.Local,
            Path = Path.Join(Directory.GetCurrentDirectory(), "../UI/dist")
        });
    }
}

Я удалил файлы cookie localhost и localhost:5000 из браузера.

1 Ответ

0 голосов
/ 04 августа 2020

Быстро предположим, что это проблема ie SameSite, которую разные браузеры обрабатывают по-разному из-за различных ошибок.

Эта статья может дать вам отправную точку:

Кроме того, ваш метод Configure выглядит очень странный. Поскольку порядок операторов App.Use имеет значение, и обычно вы помещаете app.Use Mvc (); последний в этом методе. Каждый входящий запрос будет проходить через те промежуточные программы, которые добавляет App.UseXXX, и если порядок будет неправильным, у вас возникнут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...