Rom*_*man 12 identityserver4 .net-6.0
我尝试将我的 ASP CORE 项目迁移到 NET6 我的项目使用下一个包
IdentityServer4.AccessTokenValidation - 3.0.1
IdentityModel.AspNetCore.OAuth2Introspection - 4.0.1
身份模型 - 5.2.0
项目构建成功。但是当我运行应用程序时出现错误
MissingMethodException: Method not found: 'IdentityModel.Client.DiscoveryEndpoint IdentityModel.Client.DiscoveryEndpoint.ParseUrl(System.String)'.
IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationOptions.ConfigureJwtBearer(JwtBearerOptions jwtOptions)
IdentityServer4.AccessTokenValidation.ConfigureInternalOptions.Configure(string name, JwtBearerOptions options)
Microsoft.Extensions.Options.OptionsFactory<TOptions>.Create(string name)
Microsoft.Extensions.Options.OptionsMonitor<TOptions>+<>c__DisplayClass10_0.<Get>b__0()
Run Code Online (Sandbox Code Playgroud)
有人遇到过这个问题吗?
Mat*_*ier 17
Roman的答案是正确的,我们可以通过 IdentityModel downgrade 来修复它,但解决该问题的另一种方法是通过 Microsoft.AspNetCore.Authentication.JwtBearer 替换 IdentityServer4.AccessTokenValidation ,并且我们可以稍微更改令牌验证,使用IdentityServer4.AccessTokenValidation我们正在像这样进行验证:
services
.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(
options =>
{
options.Authority = configuration["Authentication:Authority"];
options.ApiName = configuration["Authentication:ApiName"];
});
Run Code Online (Sandbox Code Playgroud)
现在我们可以使用Microsoft.AspNetCore.Authentication.JwtBearer进行令牌验证,如下所示:
services
.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Authority = configuration["Authentication:Authority"];
options.RequireHttpsMetadata = false;
options.TokenValidationParameters.ValidAudiences = new List<string>() { configuration["Authentication:ApiName"] };
});
Run Code Online (Sandbox Code Playgroud)
Rom*_*man 13
我调查了这个问题并找到了原因。我在更新之前使用了 IdentityModel V 4,2,2。当我将项目更新到 NET 6 时,IdentityModel 已升级到版本 5.2.0。IdentityModel V 4,2,2 和 IdentityModel 5.2.0 版本之间的区别在于签名方法。
public static DiscoveryEndpoint ParseUrl(string input, string path = null) version 5,2,0
public static DiscoveryEndpoint ParseUrl(string input) version 4,2,2
Run Code Online (Sandbox Code Playgroud)
所以我们看到在新版本中添加了默认参数。但是这个方法是由 IdentityServer4.AccessTokenValidation 包中的方法调用的。并且此包未编译为调用更新的 ParseUrl 函数。
请参阅有关此问题的主题C# 具有默认参数值的方法不会生成没有参数的重载?
| 归档时间: |
|
| 查看次数: |
13041 次 |
| 最近记录: |