Пытаясь найти ответ на этот вопрос здесь: Как правильно реализовать серверный пользовательский авторизационный провайдер на стороне сервера Я обнаружил новую ошибку, которую не знаю, как ее решить. Взяв шаблон из комментария @Henk Holterman здесь: https://devblogs.microsoft.com/aspnet/blazor-webassembly-3-2-0-preview-2-release-now-available/ Я пытался выработать некоторое понимание того, как реализовать блэйзер веб-сборки и блейзер на стороне сервера, а также различия между ними.
Локально я могу запустить свой проект, и все работает как положено, я могу войти, зарегистрироваться и авторизовать пользователя. После развертывания приложения в IIS в консоли начинают появляться ошибки WASM, связанные с отсутствием зарегистрированной службы AuthenticationStateProvider.
При первом развертывании приложения в IIS у меня также возникли проблемы с файлом appsettings. json относительно раздел IdentityServer, и мне интересно, если я что-то сломал. Единственный раздел, который я добавил, был раздел «Ключ», потому что я получал ошибки, так как имя файла не определено. Это привело меня к сообщению stackoverflow здесь: IdentityServer4 не работает в рабочей среде , чтобы помочь разрешить проблему путем экспорта сертификата ssl для использования в качестве файла, который я затем включил в каталог своего проекта на IIS.
настройки приложений на стороне сервера. json
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-BlazorApp3.Server-A7F1C813-7F5D-4B96-8663-B8FA2E1472E8;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"IdentityServer": {
"Clients": {
"BlazorApp3.Client": {
"Profile": "IdentityServerSPA"
}
},
"Key": {
"Type": "File",
"FilePath": "CertName.pfx",
"Password": "CertPassword"
}
},
"AllowedHosts": "*"
}
запуск на стороне сервера. Я включил здесь app.UsePathBase ("клиент-блейзер"), потому что в IIS мое приложение не находится на root узел. Это подузел сайта.
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging();
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
services.AddControllersWithViews();
services.AddRazorPages();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseWebAssemblyDebugging();
}
else
{
app.UseExceptionHandler("/Error");
// 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.UsePathBase("/client-side-blazor");
app.UseHttpsRedirection();
app.UseBlazorFrameworkFiles();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseIdentityServer();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
}
клиентская веб-сборка blazor program.cs
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddBaseAddressHttpClient();
//builder.Services.AddAuthorizationCore();
builder.Services.AddApiAuthorization();
await builder.Build().RunAsync();
}
builder.Services.AddAuthorizationCore () закомментирован выше, пытался следите за некоторыми другими сообщениями SO относительно моей текущей проблемы.
индекс клиента Blazor. html
<base href="/client-side-blazor/"/>
В качестве примечания, все еще немного неясно, какой проект опубликовать sh при создании веб-сборки Blazor проекта. В ссылках на серверный проект есть клиентская dll, что заставляет меня думать, что я должен опубликовать sh серверный проект, но из документации я понимаю, что я также могу развернуть / publi sh только проект веб-сборки сам (может быть, как самостоятельный проект без аутентификации / авторизации). Любая дополнительная полезная информация, которую легко проглотить, будет принята с благодарностью.
Ссылки, которые я использовал до сих пор в своем исследовании:
https://docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-3.1
https://docs.microsoft.com/en-us/aspnet/core/security/blazor/webassembly/standalone-with-authentication-library?view=aspnetcore-3.1
https://docs.microsoft.com/en-us/aspnet/core/security/blazor/webassembly/hosted-with-identity-server?view=aspnetcore-3.1