.NET Core 2.1迁3.1时IdentityServer4 PublicOrigin属性不存在报错
问题解决步骤
1. 修复NuGet包版本冲突
你的NuGet包存在多处版本不兼容问题,这是引发错误的核心原因:
- IdentityServer4系列版本必须统一:当前
IdentityServer4为4.1.2,但IdentityServer4.EntityFramework是2.5.3,两者版本不匹配。需将IdentityServer4.EntityFramework升级至4.1.2,确保所有IdentityServer4相关包版本一致。 - ASP.NET Core版本匹配:项目基于.NET Core 3.1,但
Microsoft.AspNetCore.Identity.EntityFrameworkCore使用了5.0.5(属于.NET 5),版本不兼容。需将其降级到3.1.x系列版本(如3.1.31),与项目框架版本保持一致。
修改后的PackageReference如下:
<PackageReference Include="IdentityServer4" Version="4.1.2" /> <PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" /> <PackageReference Include="IdentityServer4.AspNetIdentity" Version="4.1.2" /> <PackageReference Include="IdentityServer4.EntityFramework" Version="4.1.2" /> <PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.31" /> <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.1.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.0" />
2. 正确设置PublicOrigin
在IdentityServer4 4.x版本中,PublicOrigin是IdentityServerOptions的有效属性,版本冲突会导致编译器无法识别该属性。修复包版本后,可正常配置:
services.AddIdentityServer(options => { // 替换为你的公共Origin地址 options.PublicOrigin = "https://your-public-domain.com"; }) // 后续添加其他必要配置(如身份存储、签名凭证等) .AddAspNetIdentity<ApplicationUser>() .AddConfigurationStore(options => { options.ConfigureDbContext = b => b.UseSqlServer(connectionString); }) .AddOperationalStore(options => { options.ConfigureDbContext = b => b.UseSqlServer(connectionString); });
若处于反向代理场景,也可通过AspNetCore的ForwardedHeaders中间件处理公共原点:
// 在ConfigureServices中配置 services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // 添加允许的代理IP地址,根据实际环境调整 options.KnownProxies.Add(IPAddress.Parse("192.168.1.100")); }); // 在Configure中,将该中间件放在UseIdentityServer之前 app.UseForwardedHeaders(); app.UseIdentityServer();
内容的提问来源于stack exchange,提问作者lakykytik
相关产品推荐
相关产品推荐

