#authentication #blazor #blazor-webassembly
Вопрос:
Я только что создал веб-узел Blazor с проектом аутентификации и ничего не изменил в коде, а затем попытался разместить проект в Windows IIS, он всегда выдает мне эту ошибку при запуске веб-сайта:
("crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: Could not load settings from '_configuration/MyWebstieAut.Client'
Error: Could not load settings from '_configuration/MyWebstieAut.Client'
at a.createUserManager (http://mywebsiteaut.com/_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js:1:5887)
at Generator.prototype.next (native code)
Microsoft.JSInterop.JSException: Could not load settings from '_configuration/MyWebstieAut.Client'
Error: Could not load settings from '_configuration/MyWebstieAut.Client'
at a.createUserManager (http://mywebsiteaut.com/_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js:1:5887)
at Generator.prototype.next (native code)
at System.Threading.Tasks.ValueTask`1[TResult].get_Result () <0x21bcc70 0x0002c> in <filename unknown>:0
at Microsoft.JSInterop.JSRuntimeExtensions.InvokeVoidAsyn")
Вы можете мне в этом помочь?
Спасибо
программа.cs:
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddHttpClient("{ProjectName}.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
// Supply HttpClient instances that include access tokens when making requests to the server project
builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("{ProjectName}.ServerAPI"));
builder.Services.AddApiAuthorization();
await builder.Build().RunAsync();
appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=aspnet-{ProjectName}.Server-A5A9DCDA-10E3-45AE-A34F-DEF0D6A04784;Trusted_Connection=True;MultipleActiveResultSets=true",
"{ProjectName}ServerContextConnection": "Server=(localdb)\mssqllocaldb;Database={ProjectName}.Server;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"IdentityServer": {
"Clients": {
"{ProjectName}.Client": {
"Profile": "IdentityServerSPA"
},
"Key": {
"Type": "Store",
"StoreName": "WebHosting",
"StoreLocation": "CurrentUser",
"Name": "CN=MyApplication"
}
}
},
"AllowedHosts": "*"
}
Ответ №1:
Проверьте, опубликовали ли вы файл appsettings.json в папке wwwroot. В проекте WASM конфигурация клиента считывается из этого файла в этом расположении. И у вас, вероятно, есть еще один файл appsettings.json для вашего серверного проекта в другом месте (не wwwroot).
Если вы выбрали тип аутентификации Microsoft Identity, вам понадобится файл appsettings.json в wwwroot
папке клиентского проекта Blazor, подобного этому:
{
/*
The following identity settings need to be configured
before the project can be successfully executed.
For more info see https://aka.ms/dotnet-template-ms-identity-platform
*/
"AzureAd": {
"Authority": "https://login.microsoftonline.com/22222222-2222-2222-2222-222222222222",
"ClientId": "33333333-3333-3333-33333333333333333",
"ValidateAuthority": true
}
}
Вам также необходимо создать «Ключ», чтобы Сервер идентификации работал должным образом.
Информация здесь: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-5.0#example-deploy-to-a-non-azure-web-hosting-provider
Для целей тестирования вы можете изменить развернутые appsettings.json следующим образом (см. раздел «Ключ«).:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\mssqllocaldb;Database=aspnet-TestWasmAuthIndividual.Server-D7E2935A-AF1F-4B7C-9870-1288478498E1;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"IdentityServer": {
"Clients": {
"TestWasmAuthIndividual.Client": {
"Profile": "IdentityServerSPA"
}
},
"Key": {
"Type": "Development"
}
},
"AllowedHosts": "*"
}
с помощью этой конфигурации я развернул свой серверный проект (потому что я выбрал ASP.NET Ядро размещено) в папку на веб-сайте по умолчанию в IIS.
Не забудь переодеться, ты <base href...
в index.html если вы публикуете в подпапке.
Комментарии:
1. Я переместил файл appsetings.json в каталог www и убедился, что в папке публикации есть один файл appsetings.json, но это не сработало
2. Не могли бы вы поделиться своей программой.cs (Клиент) и своими приложениями.json (клиент) ?
3. Я добавил их в вопрос
4. Файл appsettings.json, который вы добавили в ответ, предназначен для проекта Blazor Server . Вам нужен еще один для клиента Blazor . Я добавил некоторую информацию в свой ответ.
5. Я использую тип отдельных учетных записей и хостинг с IIS