Я пытаюсь настроить очень простой проект OpenIddict, но у меня возникает много проблем и вопросов по его запуску.
Мой проект включает только библиотеку OpenIddict.AspNetCore и использует Net6. Код просто:
using Microsoft.AspNetCore;
using OpenIddict.Abstractions;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenIddict()
.AddServer(options =>
{
options
.AllowAuthorizationCodeFlow()
.RequireProofKeyForCodeExchange();
options
.SetAuthorizationEndpointUris("/authorize")
.SetTokenEndpointUris("/token");
options
.UseAspNetCore()
.EnableTokenEndpointPassthrough()
.EnableAuthorizationEndpointPassthrough();
options.EnableDegradedMode(); //To suppress calls to the DB
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.MapGet("/authorize", async (HttpContext context) =>
{
var request = context.GetOpenIddictServerRequest();
if (request != null && request.IsAuthorizationCodeFlow())
{
await context.Response.WriteAsync("Call to /authorize received");
}
throw new Exception("Invalid request");
});
app.UseRouting();
app.Run();
Когда я запускаю это, переменная запроса в моем делегате /authorize всегда имеет значение null.
Кроме того, я ожидаю, что конечная точка будет .well-known/openid-configuration, но она возвращает 404.
Я пока не хочу включать EF, потому что предпочитаю сначала увидеть рабочий процесс (и это может быть другая реализация Db, чем EF). И это повторяющаяся проблема в базовых примерах: в них слишком много деталей реализации, из-за чего очень сложно найти голые потоки для IdentityServer.
Моя цель — просто обеспечить поток кода авторизации.





Чтобы исправить нулевую переменную запроса и ошибку 404 для конечной точки конфигурации OpenID:
Это было быстро! UseAuthentication() и UseAuthorization() были намеренно опущены с моей стороны, поскольку вызов /authorize, /exchange и /token будет анонимным, и у меня больше не будет конечных точек (на данный момент). Но по сути, это сработало после того, как я его добавил.