Я хочу сгенерировать токен с четырьмя параметрами client_id, client_secret, username & user password. Client_Id и client_secret являются необязательными требованиями. Когда я генерирую токен с именем пользователя и паролем пользователя, он работает нормально, но когда я пытаюсь передать client_id, он завершается с 500 внутренней ошибкой сервера.
Когда я проверяю журнал и обнаружил:
Для этого DbContext не настроен поставщик базы данных.
Конфигурация моей службы
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddDbContext<DbContext>(options =>
{
options.UseOpenIddict();
});
services.AddOpenIddict()
// Register the OpenIddict core services.
.AddCore(options =>
{
options.UseEntityFrameworkCore().UseDbContext<DbContext>();
})
.AddServer(options =>
{
options.UseMvc();
options.EnableTokenEndpoint("/connect/token");
options.AllowPasswordFlow().AllowRefreshTokenFlow();
options.SetAccessTokenLifetime(TimeSpan.FromMinutes(10));
options.SetRefreshTokenLifetime(TimeSpan.FromHours(4));
options.AcceptAnonymousClients();
options.DisableHttpsRequirement();
})
.AddValidation();
services.AddAuthentication(options =>
{
options.DefaultScheme = OpenIddictValidationDefaults.AuthenticationScheme;
});
}
LOG
fail: Microsoft.AspNetCore.Server.Kestrel[13]
Connection id "0HLJJPK2L74A1", Request id "0HLJJPK2L74A1:00000003": An
unhandled exception was thrown by the application.
System.InvalidOperationException: No database provider has been
configured for this DbContext. A provider can be configured by
overriding the DbContext.OnConfiguring method or by using AddDbContext
on the application service provider. If AddDbContext is used, then also
ensure that your DbContext type accepts a DbContextOptions<TContext>
object in its constructor and passes it to the base constructor for
DbContext.
at System.Threading.Tasks.ValueTask`1.get_Result()
at
OpenIddict.Core.OpenIddictApplicationManager`1.FindByClientIdAsync(String
identifier, CancellationToken cancellationToken)
at OpenIddict.Core.OpenIddictApplicationManager`1.
OpenIddict.Abstractions.IOpenIddictApplicationManager.
FindByClientIdAsync(String identifier, CancellationToken
cancellationToken)
Проблема в том, что это происходит только тогда, когда я передаю client_id по запросу токена. Я думаю, что client_Id автоматически проверяется openiddict. Я хочу проверить этот client_id с помощью моего метода / connect / token.
Я не настраиваю никакой dbcontext в моем приложении. Там в любом случае
сгенерировать токен с помощью client_id & client_secret & id пользователя & User Pass без настройки ниже строки или есть какая-либо другая конфигурация для этого
.AddCore(options =>
{
options.UseEntityFrameworkCore().UseDbContext<DbContext>();
})
Я использую базу данных Oracle для своего приложения.