Одна из причин, по которой вам нужно реализовать интерфейс, а не расширять базовый класс, заключается в том, что вы уже расширяете какой-либо другой класс. Вы можете расширить только один класс, но вы можете реализовать любое количество интерфейсов.
Если вы расширяете Thread, вы в основном предотвращаете выполнение вашей логики любым другим потоком, чем «это». Если вы хотите, чтобы поток выполнял вашу логику, лучше всего реализовать Runnable.
Вы можете написать серверное приложение (будет работать облачная функция), в котором хранятся секреты. Клиенты звонят вашей конечной точке с какой-либо формой идентификатора, и вы возвращаете токен доступа. Если у ваших пользователей есть браузер, они могут авторизоваться каждый раз; в противном случае вам нужно будет запросить токен обновления, который вы храните, и использовать его для создания AT.