Перехватить вызов для обновления токена GRPCAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Перехватить вызов для обновления токена GRPC

Сообщение Anonymous »


Я использую GRPC с прототипом в своем проекте, и у меня есть токены KEY и AUTHORITY для доступа к API сервера. Итак, мне нужно обновить KEY, используя мой AUTHORITY. Я создаю канал следующим образом:

OkHttpChannelBuilder.forAddress(хост, порт) .usePlaintext() .intercept(аутентификация, регистратор) .строить() Мой перехватчик выглядит так:

класс AuthClientInterceptor( частные настройки val: Настройки, частный val keyApi: KeyApi): ClientInterceptor { сопутствующий объект { Private const val ACCESS_TOKEN = "авторизация" } переопределить fun interceptCall(method: MethodDescriptor?, CallOptions: CallOptions?, следующий: Канал): ClientCall { val call = next.newCall(метод, callOptions) val callForwarding = объект: ClientInterceptors.CheckedForwardingClientCall(call) { переопределить funcheckedStart(responseListener: Listener?, headers: Metadata) { синхронизированный (this@AuthClientInterceptor) { val keyCreated = prefs.getAccessKeyCreated() val keyExpires = prefs.getAccessKeyExpires() val currentTime = System.currentTimeMillis() if (currentTime keyExpires) { keyApi.issueNewKey(prefs.getAuthority()) .map { it.data } .doOnSuccess { prefs.setAccessKey(it.token) } .doOnSuccess { prefs.setAccessKeyCreated(it.createdDate) } .doOnSuccess { prefs.setAccessKeyExpires(it.expiresDate) } .blockingGet() } } val keyData = Metadata.Key.of(ACCESS_TOKEN, Metadata.ASCII_STRING_MARSHALLER) если (headers[keyData] == null) { headers.put(keyData, "Носитель ${prefs.getAccessKey()}") } call.start(responseListener, заголовки) } } обратный звонокПереадресация } } Как видите, я просто проверяю текущее время и сравниваю его с датами создания и срока действия токена.

Так вот, мне это не нравится. Я хочу реализовать это:

1) Отправить запрос на сервер;

2) Проверьте ответ. Если это означает, что срок действия моего КЛЮЧА истек, обновите ключ синхронно и повторите запрос (например, аутентификатор).

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

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»