Dot*_*per 5 c# asp.net-core .net-5 asp.net-core-5.0
我从 3.1 版开始使用 .NET Core API 授权,在我将项目升级到 .NET 5 之前一直运行良好。更新后,我得到了一个NullReferenceException.
这是来自Startup.cs的代码:
配置服务
services.AddDbContext(options =>
options.UseInMemoryDatabase("Databaase"));
services.AddDefaultIdentity()
.AddEntityFrameworkStores();
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateIssuerSigningKey = true,
ValidIssuer = configuration["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Jwt:SecretKey"])),
ValidAudience = configuration["Jwt:Audience"],
ValidateAudience = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero // Override the default clock skew of 5 mins
};
});
Run Code Online (Sandbox Code Playgroud)
配置
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
Run Code Online (Sandbox Code Playgroud)
这是我的DbContext
public class ApplicationDbContext : ApiAuthorizationDbContext
Run Code Online (Sandbox Code Playgroud)
数据库上下文构造函数
public ApplicationDbContext(DbContextOptions options, IOptions operationalStoreOptions, ICurrentUserService currentUserService, IDateTime dateTime) : base(options, operationalStoreOptions)
{
_currentUserService = currentUserService;
_dateTime = dateTime;
}
Run Code Online (Sandbox Code Playgroud)
我收到NullReferenceException以下错误详细信息:
Object reference not set to an instance of an object.
Microsoft.Extensions.DependencyInjection.ConfigureApiResources.GetApiResources()+MoveNext()
Microsoft.Extensions.DependencyInjection.ConfigureApiResources.Configure(ApiAuthorizationOptions options)
Run Code Online (Sandbox Code Playgroud)
编辑: GitHub 上提出的问题https://github.com/dotnet/aspnetcore/issues/28456
如果有人正在寻找此问题的解决方案,根据更新中提供的 Github 链接,该问题已通过添加Key和解决.AddIdentityServerJwt()
密钥必须添加到appsettings.Development.json如下:
"IdentityServer": {
"Key": {
"Type": "Development"
}
}
Run Code Online (Sandbox Code Playgroud)
还修改Startup.cs为包括.AddIdentityServerJwt():
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddIdentityServerJwt()
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateIssuerSigningKey = true,
ValidIssuer = configuration["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["Jwt:SecretKey"])),
ValidAudience = configuration["Jwt:Audience"],
ValidateAudience = true,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero // Override the default clock skew of 5 mins
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |