问题 运行 IdentityServer4

Issue running IdentityServer4

我正在了解 IdentityServer4 https://identityserver4.readthedocs.io/en/release/quickstarts/0_overview.html,但似乎无法正常工作。

创建项目的 API 部分并进行相应配置后:

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
            {
                Authority = "http://localhost:5000",
                RequireHttpsMetadata = false,

                ApiName = "api1"
            });

            app.UseMvc();
        }

我收到以下错误:

'IApplicationBuilder' does not contain a definition for 'UseIdentityServerAuthentication' and no extension method 'UseIdentityServerAuthentication' accepting a first argument of type 'IApplicationBuilder' could be found (are you missing a using directive or an assembly reference?)

有什么我在这里遗漏的建议吗?

编辑 1: 我注意到我无法引用命名空间,即使软件包已安装并存在。

using IdentityServer4.AccessTokenValidation;

using IdentityServer4;

您需要 this 包。并使用命名空间 IdentityServer4.AccessTokenValidation

好吧,我刚刚关闭并重新打开 Visual Studio 2017,问题就消失了。可能 Visual Studio 第一次拉下 IdentityServer4.AccessTokenValidation 包时卡住了,重新打开项目导致它再次尝试,这次成功了。

只是为了提供update/answer,后续版本的IdentityServer4包工作正常

目前正在使用 ID4 2.0 包。

您可以在 github IdentityServer4:

查看最新文档

它使用 services.AddAuthentication 方法在 ConfigureServices 方法中设置身份验证选项。

这是他们正在使用的 test server 代码

我遇到了同样的问题,我按照 IdentityServer 4 Quickstart Samples, in particular the Javascript Client 示例解决了。

所以,这就是它在这里的作用:

  1. 检查依赖版本。报告了 IdentityServer 运行 .NET Core 2.0 的问题。在我的 API 项目中,我使用了 Microsoft.Asp.NetCore.All 2.0.5 版和 IdentityServer4.AccessTokenValidation 2.3.0 版。

  2. 在Startup.cs里面,在Configure方法中添加:app.UseAuthentication();因为它在 example.

  3. 中使用
  4. 最后一步是向 ConfigureServices 方法添加身份验证,因为它在 example:

    public void ConfigureServices(IServiceCollection services)
    {
      services.AddMvcCore()
        .AddAuthorization()
        .AddJsonFormatters();
    
      services.AddAuthentication("Bearer")
        .AddIdentityServerAuthentication(options =>
        {
            options.Authority = "http://localhost:5000";
            options.RequireHttpsMetadata = false;
    
            options.ApiName = "api1";
        });
     }
    

这就解决了我的问题。希望它也对你有用,请告诉我进展如何。

编码愉快。

如果您从 net core 1.1 迁移到 2.0,则需要按照 Identity Server: API Migration to ASP.NET Core 2

中所述迁移您的代码

在配置函数中

Before:
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
    Authority = "http://localhost:5000",
    RequireHttpsMetadata = false,
    ApiName = "apiApp"
});

After:
app.UseAuthentication();

在 ConfigureServices 函数中

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = 
                               JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = 
                               JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(o =>
{
    o.Authority = "http://localhost:5000";
    o.Audience = "apiApp";
    o.RequireHttpsMetadata = false;
});