Я работаю над инфраструктурным проектом и думаю, что мог бы использовать некоторые рекомендации; Я полил документы и, кажется, немного потерян. Мой проект настроен следующим образом.
У меня есть сервер (API), который подключен к базе данных MySQL через EntityFramework. На этом сервере есть экземпляр IdentityServer4, а также ряд потребляемых конечных точек. Подключение к этому серверу будет настольным приложением и несколькими мобильными приложениями. Эти приложения будут подключаться к серверу и авторизоваться через грант ResourceOwnerPassword. (Эта часть, кажется, работает.)
Часть, в которой я запутался: у меня также есть веб-сервер MVC (Web), который должен иметь возможность доступа к тем же конечным точкам через AJAX / CORS. Этот сервер представляет собой отдельную сборку и не имеет пакета IdentityServer4. Я хотел бы иметь специальную веб-страницу (/ логин), которая должна позволять пользователю вводить имя пользователя / пароль / флажок Запомнить меня. Затем форма должна передать клиенту модель с помощью запроса HttpPost, который затем отправит данные в API, который должен пройти аутентификацию в базе данных, и в случае успеха выдаст авторизационный код ie (сеанс / постоянный на основе окна RememberMe) какую сеть затем можно использовать для авторизации пользователя и получения заявок от. Повар ie также будет использоваться для доступа к конечным точкам в API, которые требуют аутентификации.
В настоящее время я могу использовать Postman для отправки запроса в API, который возвращает два файла cookie: idsrv.session и .AspNetCore.Identity.Application.
Есть ли какие-либо проблемы с этой инфраструктурой, поскольку я предвидели это? Как мне распознать и потреблять повара ie, используя Asp. NET Идентичность (т. Е. Чтобы я мог получить доступ к User.Context
со страницы Razor)
Следующее из моего файла конфигурации из Web:
public void ConfigureServices(IServiceCollection services) {
services.Configure<CookiePolicyOptions>(options => {
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(o => {
o.DefaultScheme = "Cookies";
o.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", o => {
o.Authority = Configuration["Authority"];
o.RequireHttpsMetadata = false;
o.ClientId = Configuration["ClientId"];
o.ClientSecret = Configuration["ClientSecret"];
o.ResponseType = "code";
o.SaveTokens = true;
});
}
// 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.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes => {
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}