Как получить код авторизации с помощью Identity Server 4 Поток типа предоставления кода авторизации - PullRequest
0 голосов
/ 10 января 2020

Я использую do tnet core (. NET Core) 3.1 с пакетом IdentityServer4. У меня есть SPA, который я буду sh интегрировать с Identity Server 4, поэтому я иду по пути использования Код авторизации типа предоставления с использованием PKCE. Я понимаю основную идею c этого типа предоставления, однако я не понимаю, как обменять имя пользователя / пароль на код авторизации . Вот как я понимаю.

  1. SPA делает GET-запрос к / авторизации конечной точки, который выглядит примерно так: http://localhost:5000/connect/authorize?client_id=js&redirect_uri=http://localhost:5003/callback.html&response_type=code&scope=openid profile api1&state=8636d5233f77413584799be6cafe03a7&code_challenge=FbNm1tMkaRMzcSBv4_d5Rpq4VNaqyINVkCAcHsZkKV0&code_challenge_method=S256&response_mode=query
  2. Это возвращает перенаправление 302 на http://localhost: 5000 / Account / Login , который, как я полагаю, должен быть экраном входа, размещенным на сервере аутентификации.
  3. Пользователь отправляет свои учетные данные, сервер аутентификации проверяет учетные данные и возвращает еще 302 перенаправления на указанный redirect_url, http://localhost: 5003 / обратный вызов. html в этом случае. URL перенаправления должен включать сгенерированный код авторизации и предоставленное состояние в строке запроса.
  4. SPA проверяет состояние и затем отправляет запрос конечной точке / token, которая включает в заголовок: авторизация = Basi c Y2xpZW50OnNlY3JldA == и в строке запроса: grant_type = код авторизации, код = код авторизации , redirect_uri = http://localhost/redirect
  5. сервер авторизации возвращает действительный токен.

Я выполнил шаги 1 и 2 (пользовательского интерфейса пока нет, но это пока не важно). Вызов / авторизация работает. Я получаю действительный ответ 302. Я застрял в шагах 3 и 4. Требуется ли написать конечную точку, которая генерирует код авторизации и возвращает перенаправление 302, содержащее его, или это то, что уже встроено в Identity Server 4 (например, конечные точки / authorize и / token)?

Я собрал несколько примеров, которые я нашел в Интернете, включая этот https://identityserver4.readthedocs.io/en/latest/quickstarts/4_javascript_client.html. Кажется, что нет полных примеров, использующих этот тип гранта. Я также включил в свой запуск несколько тестовых ресурсов, клиентов и пользователей.

services.AddIdentityServer()
    .AddDeveloperSigningCredential()
    .AddInMemoryApiResources(Config.GetAllApiResources())
    .AddInMemoryClients(Config.GetClients())
    .AddTestUsers(Config.GetUsers());

Спасибо за любую помощь, которую вы можете оказать, по крайней мере, pu sh me в правильном направлении.

Ответы [ 2 ]

0 голосов
/ 10 января 2020

для шага № 3, вам нужно предоставить пользовательский интерфейс / конечную точку для входа в систему пользователя

Команда IdentityServer4 упростит эту задачу, создав шаблон, который вы можете просто импортировать здесь - ссылка на шаблон - https://github.com/IdentityServer/IdentityServer4.Templates

в вашем случае, я думаю, вам нужен шаблон is4ui

0 голосов
/ 10 января 2020

Взгляните на этот быстрый старт . В частности, действие входа в систему в контроллере учетных записей, которое проверяет учетные данные.

Существует два важных шага:

  1. Вход в систему для идентификации Сервер (по умолчанию ie)
  2. Перенаправление на просмотр , который загружает this javascript для лучшего опыта в случае PKCE , URL содержит параметры запроса код и состояние , которые создаются и управляются сервером идентификации.
...