Веб-узел узла Blazor с проектом проверки подлинности в Windows IIS

#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