我正在尝试将IdentityServer4作为控制台应用程序运行。但我不确定我是否做得对。我创建了控制台应用程序(.NET Core)而不是ASP.NET核心Web应用程序(.NET Core)。
我对WebHostBuilder
的设置非常简单:
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
Startup类也非常小:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetUsers());
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();
app.UseIdentityServer();
}
}
我只是担心如果我错过了一些可能导致问题的碎片。我是正确的吗?
以下是使用.NET Core 1.1版创建Identity Server v4可执行文件的步骤。
使用控制台应用程序(.NET Core)创建项目。在Main
method实现以下代码:
public class Program
{
public static void Main(string[] args)
{
Console.Title = "IdentityServer";
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
在Startup
类中实现以下代码:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// configure identity server with in-memory stores, keys, clients and scopes
services.AddIdentityServer()
.AddTemporarySigningCredential()
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetUsers());
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(LogLevel.Debug);
app.UseDeveloperExceptionPage();
app.UseIdentityServer();
}
}
要生成可执行文件,您的project.json中不能有"type": "platform"
。例如,我的project.json看起来像这样:
{
"dependencies": {
"IdentityServer4": "1.1.1",
"Microsoft.AspNetCore.Diagnostics": "1.1.0",
"Microsoft.AspNetCore.Hosting": "1.1.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
"Microsoft.Extensions.Logging.Console": "1.1.0",
"Microsoft.NETCore.App": {
"version": "1.1.0"
}
},
"frameworks": {
"netcoreapp1.1": {
}
},
"runtimes": {
"win7-x64": {},
"win8-x64": {},
"win10-x64": {}
}
}
你可以用dotnet发布命令生成可执行文件,如下所示。
dotnet publish -c release -r win7-x64
dotnet publish -c release -r win8-x64
dotnet publish -c release -r win10-x64
免责声明:这是最小的运行版本,也许你需要扩展配置,取决于你需要什么。
每个.NET Core应用程序都是一个控制台应用程因此,您使用的模板没有区别。
但我想在你的主要内容 - 你错过了对UseContentRoot
的号召。