在AuthenticationOptions类上使用带有asp.net core2.0 erron的IdentityServer4

时间:2017-09-22 16:10:31

标签: c# authentication asp.net-core identityserver4 asp.net-core-2.0

我正在使用asp.net core 2.0开发Identity Server 4.

在ConfigurationServices()方法中,我添加了:

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

           ApiName = "api1"
        });

但它给出了编译错误:

  

对'AuthenticationOptions'类型的引用声称它在'Microsoft.AspNetCore.Authentication'中定义,但找不到它。

当我查看汇编代码时:

    namespace Microsoft.AspNetCore.Builder
    {
    public class IdentityServerAuthenticationOptions : Builder.AuthenticationOptions
    {
      // properties goes here
    }
    }

我基于此sample project(.net核心1.1)工作,AuthenticationOptions构建错误在此Github link中进行了大量讨论,但似乎还没有完全支持Identity Server 4 .net core2.0。是真的吗?

请分享您的想法如何解决此错误或如何解决此问题。

1 个答案:

答案 0 :(得分:2)

这是正确的 - 认证中间件在asp.net core 2.0中发生了变化。我相信有release candidate of IndentityServer4.AccessTokenValidation for 2.0;但是,目前尚未针对2.0更新Identity Server文档和示例。

一种选择是使用Microsoft JwtBearer处理程序来保护您的API。 IdentityServer4.AccessTokenValidation库在底层使用它。它看起来像这样(在ConfigureServices()内):

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

另一个选择是更新您的代码以使用IdentityServer4.AccessTokenValidation 2.0 rc。我还没试过这个,但它看起来像这样:

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(o =>
{
    o.ApiName = "api1";
    o.Authority = "http://localhost:59391";
    o.RequireHttpsMetadata = false;
});