Xsolla Summer School 2020 BE. Тестовое задание.
Приложение представляет собой сервис платежной системы, которая имитирует процесс оплаты банковской картой.
- API-метод для создания новой сессии (принимает сумму и назначение платежа, возвращает идентификатор платёжной сессии (sessionId))
- API-метод для выполнения платежа (принимает данные карты (номер, CVV/CVC, дата истечения действия) и sessionId, возвращает сообщение о результате выполнения платежа)
- Проверка номера карты по алгоритму Луна (упрощенному)
- Ограничение времени жизни платежной сессии
- JWT-авторизация
- Защита от перехвата JWT
- .NET Core 3.1
В папке с проектом выполнить команды: dotnet restore
, dotnet run
. Приложение будет запущено по адресу https://localhost:5001/.
- Интерактивная документация (Swagger) после запуска приложения доступна по https://localhost:5001/index.html.
- OpenAPI-спецификация API, предоставляемого сервером, доступна по адресу https://localhost:5001/swagger/v1/swagger.json
- admin@gmail.com, 12345
- qwerty@gmail.com, 22222
- 12345@gmail.com, 55555
Защита заключается в добавлении пользовательского контекста в JWT и Cookie.
Пользовательский контекст имеет вид: {логин пользователя}.{кол-во миллисекунд с 01.01.1970}.{GUID}
.
При получение токена, в JWT добавляется пользовательский контекст в хешированном виде (алгоритм SHA1), а в Cookie устанавливается значение в исходном виде. Далее при обращении к API-методам, срабатывает Middleware-прослойка, которая выполняет дополнительную валидацию пользователя: выполняется получение пользовательского контекста из Cookie и JWT. Для значения контекста из Cookie вычисляется хеш, который сравнивается со значением из JWT. Если токен будет перехвачен, то запросы к API не пройдут, так не задано значение контекста в Cookie, а восстановить это значение не получится.