Распространение OIDC сторонней аутентификации в приложении клиента, в OpenIddict ⇐ C#

Место общения программистов C#
Anonymous
Распространение OIDC сторонней аутентификации в приложении клиента, в OpenIddict

Сообщение Anonymous »

Мы разрабатываем сервер аутентификации/идентификации на основе сервера .net/c# & openiddict. Мы делегируем аутентификацию на сторонний сервер (используя клиент OpenIddict), в настоящее время только один поставщик, но ожидая добавления других. «Счастливый путь» вхождения работает нормально: пользователь попадает на нашу конечную точку аутентификации, спрашивает, какую 3-ю, которая они хотят, перенаправляется на этот сайт, выполняет аутентификацию и перенаправляется обратно на наш сервер, где мы приносим токенс и перенаправляем их обратно на их правильный redirect_uri с кодом, чтобы вернуть к нам. не удается и перенаправляет на наш перенаправление URI с ошибкой - 

Код: Выделить всё

https://id-server.example.com/identity/login/callback/{provider}?state={whatever}&error=access_denied&error_desciption=...
- затем трубопровод OpenIddict возвращает ошибку 400 BadRequest. Вместо этого мы хотели бы завершить поток обратно к приложению клиентского приложения redirect_uri с соответствующим образом преобразованной ошибкой (error = "access_denied", error_description = " Аутентификация не удалась").
Я добавил обработчик ошибки в опции клиента OpenIdct:

Код: Выделить всё

options.AddEventHandler(builder =>
{
builder.UseInlineHandler(context =>
{
if (context.RequestUri?.AbsolutePath.StartsWith("/identity/login/callback") ?? false)
{
// Proceed to the Controller handler logic:
context.SkipRequest();
}

return default;
});
});
< /code>
, что приводит к тому, что поток выполнения пропускает ответ на ошибку OpenIddict и управляющий потоком через наш обработчик обратного вызова как обычно. Нам нужно определить соответствующий запрос клиента и перенаправить на правильный redirect_uri 
с правильным состоянием от клиента:

Код: Выделить всё

[HttpGet("~/identity/login/callback/{provider}"), HttpPost("~/identity/login/callback/{provider}"), IgnoreAntiforgeryToken]
public async Task LogInCallback()
{
// Retrieve the authorization data validated by OpenIddict as part of the callback handling.
var result = await HttpContext.AuthenticateAsync(OpenIddictClientAspNetCoreDefaults.AuthenticationScheme);

if (!result.Succeeded && result... )
тратить больше времени на отладку приложения, я могу идентифицировать эти переходы страниц (в успешном потоке входа в систему):

Вернуться в «C#»