Попытка подключиться к странице входа в IdentityServer4 не удалась - PullRequest
0 голосов
/ 29 января 2019

У меня есть веб-сайт, который я хочу сделать с концепцией OAuth2 / OIDC для проверки концепции.С этой целью я настроил локально работающее приложение MVC IdentityServer4 в качестве демонстрационного сервера OIDC, следуя рекомендациям по быстрой установке IdentityServer4.Это прекрасно работает и позволяет перейти к:

http://localhost:5000/.well-known/openid-configuration

Позволяет мне увидеть документ об обнаружении.

Я создал поддельную страницу входа в систему в этом приложении OIDC, которая состоит только из кнопки входа без пользователятребуются учетные данные.

Там нет фактической базы данных пользователей, и я просто жестко кодирую некоторые пользовательские данные, которые возвращаются, когда происходит «аутентификация».

На моем ранее существовавшем сайте я добавилOWIN среднего износа и я настраиваю OIDC с помощью OpenIdConnectAuthenticationOptions .ClientId, области видимости, секретные данные и т. Д. Все совпадают, как требуется, и полномочия устанавливаются так, чтобы указывать на мое локально работающее демонстрационное приложение OIDC (http://localhost:5000). URL-адрес перенаправления возвращается на мой ранее существующий сайт после завершения аутентификации.

Все это выглядит нормально, но вот чего я хочу достичь и не могу начать работать. На моем ранее существующем сайте, когда я перехожу на любую страницу, требующую аутентификации, я хочу, чтобы пользователь был перенаправлен наСтраница входа, которую я создал в приложении OIDC. Они нажимают кнопку входа в систему (данные пользователя не требуются), аутентифицируются и перенаправляются обратно на исходную страницу.

В настоящее время при переходе на защищенную страницу я успешно перенаправлен наПриложение OIDC, но я перенаправлен на страницу с ошибкой, и я не знаю, почему. Страница с ошибками не дает мне никаких подробностей, на самом деле она жестко запрограммирована в приложении.

Когда я смотрю на документ обнаружения, я вижу, чтодля параметра authorization_endpoint установлено значение:

http://localhost:5000/connect/authorize

Так что я подумал, что, возможно, мне нужнолибо изменить это, указав на Home / Login, где я создал фиктивную форму входа, либо мне нужно было на самом деле создать эту конечную точку подключения / авторизации и поместить туда свою форму.Создание конечной точки не имеет значения, оно никогда не получает удар, и вместо этого я просто получаю страницу с ошибкой в ​​своем приложении OIDC.Изменение его на home / login также, по-видимому, игнорируется.

В данный момент я удален от своего основного компьютера, поэтому отсутствуют фрагменты кода, но, по сути, настройка соответствует руководству по быстрой установке IdentityServer4 и OIDC.приложение действительно работает.

Проблема в том, что мой ранее существовавший сайт правильно перенаправил на страницу входа.

Я застрял на этом довольно долгое время ихотелось бы даже дойти до стадии просмотра фиктивной страницы входа.Любые указатели приветствуются и снова приносим извинения за отсутствие примера кода.

ОБНОВЛЕНИЕ

У меня появляется форма входа в систему, установив конфигурацию openid следующим образом:

Configuration = new OpenIdConnectConfiguration()
{
 AuthorizationEndPoint = "http://localhost:5000/home/login"
}

Однако, когда я нажимаю «Войти», это не регистрирует меня.На этом входе в систему я делаю это:

await HttpContext.SignInAsync("subjectId","username", authenticationProps);

и затем перенаправляю обратно на мой существующий сайт.Однако это не аутентифицирует меня, и перенаправление заканчивается перенаправлением обратно на страницу входа.

ОБНОВЛЕНИЕ 2

Я думаю, что URI перенаправления, возможно, должен делать что-то большее.В настоящее время я делаю следующее:

Попытка доступа к закрытой странице -> Перенаправление на сервер OIDC -> Нажмите «Вход» (это устанавливает тему и пользователя успешно) -> Перенаправлено для перенаправления URI, который немедленно возвращает меня обратно насервер OIDC.

Так, может быть, URI перенаправления должен подтвердить вход в систему или иным образом что-то сделать?

1 Ответ

0 голосов
/ 31 января 2019

Таким образом, в протоколе open id connect конечная точка авторизации используется для проверки информации о клиенте, передаваемой в качестве параметров запроса (client_id, scopes, redirect_uri и т. Д.).На вашем сервере аутентификации ничего из этого не проверяется, если вся конечная точка возвращает форму.С другой стороны, проверка может быть утомительной, поэтому сохранение конечной точки авторизации отдельно от конечной точки для входа в систему может стоить задуматься.

Разработчики Identity Server подумали о том же, поэтому они настроили конечную точку (ипроверка конечной точки) для вас как часть промежуточного программного обеспечения.При проверке используются внедренные компоненты (в первую очередь client_store и определенные вами области), которые будут использоваться Identity Server.

После того, как инфраструктура проверит ваш запрос на авторизацию с использованием реализации вашего хранилища клиентов, он перенаправит пользователя накакую бы страницу входа вы не указали.Страницу входа можно указать, изменив ее с помощью делегата, который может быть передан в качестве второго параметра AddIdentityServer (который принимает что-то типа IdentityServerOptions , который мы будем называть просто 'options'«).В делегате вы можете указать URL-адрес входа на страницу, изменив значение 'options.UserInteraction.LoginUrl' на URL-адрес страницы входа.

После того, как пользователь войдет в систему и вы вызовите метод signInAsync дляHttpContext, вы на самом деле должны перенаправить обратно к параметру запроса, который передается на страницу входа, называемую return_url (который в основном является первоначальным запросом конечной точки авторизации).Эта конечная точка авторизации дополнительно проверяет файл cookie и отправляет пользователя обратно к «redirect_uri» (если для согласия клиента установлено значение false) с кодом (если используется поток кода авторизации ) или id_token иопционально токен доступа (если используется неявный поток ).

Предполагая неявный поток для простоты, токены можно найти в запросе к 'redirect_uri' и оттуда все вверхтебе.Обычно клиент выпускает какой-то файл cookie (который может содержать идентификатор или токен доступа), чтобы отметить успешную аутентификацию провайдера идентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...