Как обрабатывать аутентификацию с использованием akka-streams и akka-http для клиентских приложений

Я пишу приложение с использованием Akka Streams и Akka Http, которому необходимо подключиться к аутентифицированной веб-службе (которая возвращает токен аутентификации), а затем необходимо регулярно запрашивать службу и, возможно, выполнять с ней другие действия в ответ на запрос (скачать файлы и т. д.). Токен аутентификации истекает через определенное время, поэтому его необходимо обновить.

Как мне обрабатывать токен аутентификации? Его необходимо передать в разные потоки на графике (везде, где я запрашиваю службу), и когда токен аутентификации становится недействительным, мне нужно запросить новый.

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

Одна мысль, которая у меня была, заключалась в том, что токен аутентификации можно было бы заархивировать с другими данными, проходящими через поток, и передать каждому элементу Flow, который в этом нуждался. Затем, если токен в какой-то момент выходит из строя, поток каким-то образом запрашивает новый с каким-то потоком обратной связи или механизмом восстановления. Но я не знаю, возможно ли это и как это реализовать.

Есть ли третий подход, о котором я не подумал, или что-то, что я пропустил в потоках Akka или Akka HTTP?


person jportway    schedule 11.12.2017    source источник


Ответы (1)


akka-http построен на akka-streams, так что вы уже знаете об этом. Для управления сеансом пользователя с помощью akka-http ознакомьтесь с https://github.com/softwaremill/akka-http-session/. Вы также можете прочитать этот отличный пост.

Вы также можете взглянуть на недавно загруженный мной образец кода, в котором не используется akka-http-session - доступны здесь. Надеюсь, что некоторые из этих материалов помогут.

person Samik R    schedule 22.01.2018