IdentityServer 4作为控制台应用程序

问题描述 投票:0回答:3

我正在尝试将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 identityserver4
3个回答
2
投票

以下是使用.NET Core 1.1版创建Identity Server v4可执行文件的步骤。

使用控制台应用程序(.NET Core)创建项目。在Mainmethod实现以下代码:

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

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


1
投票

每个.NET Core应用程序都是一个控制台应用程因此,您使用的模板没有区别。

但我想在你的主要内容 - 你错过了对UseContentRoot的号召。


© www.soinside.com 2019 - 2024. All rights reserved.