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

Место общения программистов 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... )
тратить больше времени на отладку приложения, я могу идентифицировать эти переходы страниц (в успешном потоке входа в систему):
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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