Я использую по умолчанию asp. net core + angular scaffold с идентификатором для размещения моего SPA внутри приложения MVC, часть аутентификации работает так, как должна, внутри angular SPA.
В моем startup.cs нет ничего особенного, стандартный. net основной материал для скаффолда:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DbName")));
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
services.AddControllersWithViews().AddRazorRuntimeCompilation();
services.AddRazorPages();
services.AddHttpContextAccessor();
// In production, the Angular files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
if (!env.IsDevelopment())
{
app.UseSpaStaticFiles();
}
app.UseRouting();
app.UseAuthentication();
app.UseIdentityServer();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseProxyToSpaDevelopmentServer("http://localhost:4200");
}
});
}
}
Я также обслуживаю бритвенные представления через net основные контроллеры для другой части приложения , однако шаблонная аутентификация здесь вообще не работает.
Вот что происходит в настоящее время:
- Go по адресу, защищенный angular охрана маршрутизатора перенаправляет меня на шаблонный вход page.
- Я вхожу в систему и перенаправляюсь в SPA. '
Когда я «пересекаю путь» из SPA, возникает проблема:
I go to: http://myadress/mycontroller/MyAction) Я выхожу из приложения и, используя простой контроллер с
UserManager<ApplicationUser>
, проверяю, существует ли HttpContext.User:
public IActionResult MyAction()
{
//user cannot be found here.
var user = _userManager.GetUserAsync(HttpContext.User);
return View();
}
Я попытался поставить [Authorize]
, думая, что перенаправление на страницу входа снова должно помочь мне войти в «часть Mvc» приложения. (поскольку ранее я вошел в систему с URL-адресом перенаправления в SPA), но безуспешно: я получаю 401. При посещении без дополнительной информации.
Желаемый результат, который у меня есть со всей этой катастрофой, следующий:
- 2 части приложения, размещенного в asp. net ядре; 1 - ваше стандартное приложение MVC с видами бритвы (только администратор), а другое - SPA в angular для клиентов (только клиент).
- как только пользователь входит в систему, он / она перенаправляется на основе role - правая часть приложения, поэтому / dashboard для администраторов (MVC) и / app для клиентов (angular)
Это в основном все, я не думаю, что это должно быть так сложно но я новичок в asp. net core.
Надеюсь, я дал достаточно информации, любая помощь приветствуется.