IdentityServer 4 作为控制台应用程序

IdentityServer 4 as a Console Application

我正在尝试 运行 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 class 非常小:

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 应用程序都是一个控制台应用程序。因此,您使用的模板没有区别。

但我认为在您的主体中 - 您错过了对 UseContentRoot 的呼叫。

您可以按照 https://blogs.msdn.microsoft.com/luisdem/2016/10/11/net-core-how-to-publish-a-self-contained-application-exe/

中所述发布 self-contained 应用程序

以下是使用 .NET Core 版本 1.1.

创建 Identity Server v4 可执行文件的步骤

使用控制台应用程序 (.NET Core) 创建项目。在 Main 方法中执行以下代码:

public class Program
{
    public static void Main(string[] args)
    {
        Console.Title = "IdentityServer";

        var host = new WebHostBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

Startupclass中执行以下代码:

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 publish 命令生成可执行文件,如下所示。

dotnet publish -c release -r win7-x64
dotnet publish -c release -r win8-x64
dotnet publish -c release -r win10-x64

免责声明:这是最小 运行 版本,也许您需要扩展配置,具体取决于您的需要。