Обратный вызов Open Id Connect не достигает точки останова - PullRequest
0 голосов
/ 08 мая 2020

Я использую OpenIdConnect для подключения к серверу IS4. Все работает правильно, это заставляет меня войти в систему, а затем возвращает меня на мой сайт MVC с правильным кодом входа для будущих вызовов API.

Проблема в том, что я не могу заставить мое приложение обрабатывать обратный вызов. Мой план состоит в том, чтобы мой пользователь был перенаправлен для входа в систему единого входа, а затем вернулся на мой сайт, где я мог бы выполнить вызов API для настройки пользователя в моей системе.

Вот моя служба аутентификации в моем MVC app

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
    .AddCookie("Cookies")
    .AddOpenIdConnect("oidc", options =>
    {
        options.Authority = "https://localhost:5000";

        options.ClientId = "mvc";
        options.ClientSecret = "49C1A7E1-0C79-4A89-A3D6-A37998FB86B0";
        options.ResponseType = "code";

        options.SaveTokens = true;
        options.CallbackPath = "/Home/Login";

        options.Scope.Add("api1");
        options.Scope.Add("offline_access");
    });

После входа в систему я ожидаю, что смогу поймать ответ на свой обратный звонок "/ Home / Login"

В моем HomeController у меня есть следующие два действия

[HttpPost]
public IActionResult Login(string code)
{
    _logger.LogError("TEST  1");

    return View();
}

public IActionResult Login()
{
    _logger.LogError("TEST  2");

    return View();
}

Ни разу не попадут, что мне нужно сделать, чтобы контролировать, где мой пользователь попадает после входа в систему у поставщика SSO?

1 Ответ

1 голос
/ 11 мая 2020

Как объясняет мой ответ , CallbackPath - это путь, по которому сервер будет перенаправлять во время аутентификации. Он автоматически обрабатывается самим промежуточным программным обеспечением OID C, что означает, что мы не можем управлять logi c путем создания нового контроллера / действия и установки для него CallbackPath.

По вашему требованию вы может использовать события уведомлений в OID C OWIN Middlerware, который вызывает, чтобы разработчик мог добавить пользовательский лог c. Например, вы можете запросить базу данных и создать пользователя в событии OnTokenValidated:

options.Events = new OpenIdConnectEvents
{
    OnTokenValidated = ctx =>
    {
        //query the database 

        var db = ctx.HttpContext.RequestServices.GetRequiredService<YourDbContext>();

        //perform custom logic for user management in local database


        return Task.CompletedTask;
    },
};
...