Есть ли способ установить динамически установить параметры AddOpenIdConnect в ConfigureServices в .net Core для IdentityServer4 - PullRequest
0 голосов
/ 30 августа 2018

Я новичок в .NETCore и использую IdentityServer4 для аутентификации в веб-приложении .NETCore, и мне нужно иметь возможность динамически устанавливать ClientId или redirectUrls (со страницы входа / выхода) на основе URL-адреса веб-приложение. Но нет способа получить доступ к HttpContext в методе ConfigureServices или получить доступ к параметрам AddAuthentication за пределами ConfigureServices - я действительно застрял!

    public void ConfigureServices(IServiceCollection services)
        {
            services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            services.AddScoped<ISessionHelper, SessionHelper.SessionHelper>();
            services.AddSingleton<PortalSetup>();
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddAuthentication(options =>
                {
                    options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                })
                .AddCookie("Cookies", options =>
                {
                    options.LoginPath = "/account/login";
                    options.LogoutPath = "/account/logoff";
                })
                .AddOpenIdConnect(options =>
                {
                    options.SignInScheme = Configuration["Oidc:SignInScheme"];
                    options.Authority = Configuration["Oidc:Authority"];
                    options.MetadataAddress = $"{Configuration["Oidc:Authority"]}/.well-known/openid-configuration";
                    options.RequireHttpsMetadata = Convert.ToBoolean(Configuration["Oidc:RequireHttpsMetadata"]);
                    options.ClientId = Configuration["Oidc:ClientId"];
                    options.ResponseType = Configuration["Oidc:ResponseType"];
                    options.SaveTokens = Convert.ToBoolean(Configuration["Oidc:SaveTokens"]);
                    options.GetClaimsFromUserInfoEndpoint = Convert.ToBoolean(Configuration["Oidc:GetClaimsFromUserEndpoint"]);
                    options.ClientSecret = Configuration["Oidc:ClientSecret"];
                    foreach (var s in Configuration["Oidc:Scopes"].Split(','))
                    {
                        options.Scope.Add(s);
                    }
                });



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

            services.Configure<IISOptions>(iis =>
            {
                iis.AuthenticationDisplayName = "Windows";
                iis.AutomaticAuthentication = false;
                iis.ForwardClientCertificate = false;

            });

            services.AddScoped<ActionExceptionFilter>();

            services.AddDistributedMemoryCache();
            services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromMinutes(5); // set the time for session timeout here
            });

            services.AddDataProtection()
                .PersistKeysToFileSystem(new DirectoryInfo(Configuration["keysDirectory"]));
        }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ISessionHelper session)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }
            JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

            app.UseAuthentication();
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseFileServer(new FileServerOptions
            {
                FileProvider = new PhysicalFileProvider(Configuration["ImageDirectory"]),
                EnableDirectoryBrowsing = false,
                RequestPath = new PathString("/desimages")
            });
            //enable session before mvc
            app.UseSession();
            app.UseMiddleware<PortalSetup>();
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Store}/{id?}");
            });
        }

1 Ответ

0 голосов
/ 31 августа 2018

Я закончил настройкой стандартного промежуточного программного обеспечения OIDC для получения этих параметров во время выполнения с помощью вызова ChallengeAsync. Это на самом деле довольно просто.

...