Я использую do tnet core (. NET Core) 3.1 с пакетом IdentityServer4. У меня есть SPA, который я буду sh интегрировать с Identity Server 4, поэтому я иду по пути использования Код авторизации типа предоставления с использованием PKCE. Я понимаю основную идею c этого типа предоставления, однако я не понимаю, как обменять имя пользователя / пароль на код авторизации . Вот как я понимаю.
- 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
- Это возвращает перенаправление 302 на http://localhost: 5000 / Account / Login , который, как я полагаю, должен быть экраном входа, размещенным на сервере аутентификации.
- Пользователь отправляет свои учетные данные, сервер аутентификации проверяет учетные данные и возвращает еще 302 перенаправления на указанный redirect_url, http://localhost: 5003 / обратный вызов. html в этом случае. URL перенаправления должен включать сгенерированный код авторизации и предоставленное состояние в строке запроса.
- SPA проверяет состояние и затем отправляет запрос конечной точке / token, которая включает в заголовок: авторизация = Basi c Y2xpZW50OnNlY3JldA == и в строке запроса: grant_type = код авторизации, код = код авторизации , redirect_uri = http://localhost/redirect
- сервер авторизации возвращает действительный токен.
Я выполнил шаги 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 в правильном направлении.