Я пытаюсь использовать несколько провайдеров аутентификации - очень простой повар ie аутентификация и открытый идентификатор соединения. Большинство моих пользователей будут использовать простой повар ie auth. Но несколько пользователей уже подключены к системе с открытым идентификатором, и я хочу, чтобы они могли подключиться. Я могу заставить один или другой из них работать, но не оба. Добавление openid connect отменяет другую систему cook ie. Как я могу заставить их играть хорошо друг с другом? Приемлемым решением было бы, если бы соединение Open ID не перенаправляло на экран входа в систему, и пользователям было бы необходимо go войти в систему вручную.
Вот мой класс запуска:
public class Startup
{
public Startup(IConfiguration configuration) => this.Configuration = configuration;
public IConfiguration Configuration { get; }
private CultureInfo[] supportedCultures;
private CultureInfo[] SupportedCultures => this.supportedCultures ??= new[] { new CultureInfo("en-US") };
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddRouting(options =>
{
options.LowercaseUrls = true;
options.AppendTrailingSlash = false;
options.LowercaseQueryStrings = true;
});
// Add MVC with feature folders
services.AddMvc(opt => opt.Filters
.Add(typeof(DbContextTransactionFilter)))
.AddFeatureFolders()
.AddViewLocalization()
.AddDataAnnotationsLocalization();
// Add HTTP Context to DI Container
services.AddHttpContextAccessor();
// Add localization
services.AddLocalization();
services.Configure<RequestLocalizationOptions>(options =>
{
// Just supporting English right now
options.DefaultRequestCulture = new RequestCulture("en-US", "en-US");
// You must explicitly state which cultures your application supports.
// These are the cultures the app supports for formatting
// numbers, dates, etc.
options.SupportedCultures = this.SupportedCultures;
// These are the cultures the app supports for UI strings,
// i.e. we have localized resources for.
options.SupportedUICultures = this.SupportedCultures;
});
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "oidc";
})
.AddCookie(options =>
{
options.AccessDeniedPath = "/request-access";
options.ExpireTimeSpan = TimeSpan.FromDays(14);
options.LoginPath = "/request-access";
options.LogoutPath = "/request-access";
options.Cookie.Name = "AMGAuthCookie";
})
.AddOpenIdConnect("oidc", options =>
{
options.ClientId = "MyClientID";
options.Authority = "https://myidentityserver.com/";
options.RequireHttpsMetadata = false;
options.GetClaimsFromUserInfoEndpoint = true;
options.ResponseType = "code token";
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("sitecore.profile");
options.Scope.Add("offline_access");
options.Scope.Add("sitecore.profile.api");
options.SaveTokens = true;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = JwtClaimTypes.Name,
RoleClaimType = JwtClaimTypes.Role,
};
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
var pageOptions = new DeveloperExceptionPageOptions { SourceCodeLineCount = 10 };
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage(pageOptions);
}
else
{
app.UseStatusCodePagesWithReExecute("/error/{0}");
// 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.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
var cookiePolicyOptions = new CookiePolicyOptions
{
MinimumSameSitePolicy = SameSiteMode.Strict,
};
app.UseCookiePolicy(cookiePolicyOptions);
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en-US"),
SupportedCultures = this.SupportedCultures,
SupportedUICultures = this.SupportedCultures
});
app.UseEndpoints(endpoints => endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"));
}
}