Я пытаюсь настроить IdentityServer4 в приложении netcore 3.1, работающем в службе приложений Linux (B1). Я пытаюсь загрузить ключ из файловой системы и передать его IdentityServer во время настройки ( согласно здесь ), но ключ, который я предоставляю, кажется, выбрасывается, когда IdentityServer пытается найти конфигурацию чтобы найти сам ключ ( в строке 70, как представляется, исключение выдается из ).
public void ConfigureServices(IServiceCollection services)
{
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddIdentityServer()
.AddSigningCredential(GetCert())
.AddApiAuthorization<IdentityUser, ApplicationDbContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseAuthentication();
app.UseIdentityServer(); // exception thrown here
app.UseAuthorization();
}
private X509Certificate2 GetCert()
{
// Linux App Service puts keys configured in the App Service in this directory
// I have checked - the key is correctly placed here
var bytes = System.IO.File.ReadAllBytes("/var/ssl/private/XYZTHUMBPRINTXYZ.p12");
return new X509Certificate2(bytes);
}
Я должен отметить, что на самом деле не проблема получить ключ на Azure или в самом приложении, я проверил его в файловой системе, и приложение может создать из него действительный ключ, просто IdentityServer просто отбрасывает его.
Поскольку тип хранилища ключей Windows недоступен в сервисе Linux конфигурация appsettings (пример ниже) не работает.
"IdentityServer": {
"Key": {
"Type": "Store",
"StoreName": "My",
"StoreLocation": "CurrentUser",
"Name": "CN=example.com"
}
},