我正在使用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。是真的吗?
请分享您的想法如何解决此错误或如何解决此问题。
答案 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;
});