Обновите токен sh во время сеанса Spring Boot и OAUTH2 SalesForce - PullRequest
0 голосов
/ 20 марта 2020

Я подключаюсь к SalesForce rest API, и Spring oauth2template работает очень хорошо. Я использую Spring Boot, так что это в основном просто автоматическое подключение Oauth2RestTemplate и настройка свойств oauth2, но есть проблема, и я не уверен, что это ошибка или что-то, что я не настроил должным образом. Случай, когда токен истекает на стороне SalesForce. У меня все еще есть старый токен в контексте oauth2, поэтому, если я хочу, чтобы инфраструктура получила новый токен, мне нужно вручную обнулить accesstoken и установить его как нулевой в контексте, чтобы getAccesstoken вызывал acquAccessToken в классе OAuth2RestTemplate. Я знаю, что это неправильно, но я подозреваю, что это потому, что я получаю недостающую информацию о токене, когда впервые получаю токен от SalesForce. Это ответ, когда я впервые получаю токен

{
    "access_token": "<LONG_VALUE>",
    "instance_url": "<SALESFORCE_SERVER>",
    "id": "<ID_URL>",
    "token_type": "Bearer",
    "issued_at": "1538640612182",
    "signature": "<SIGNATURE_ID>"
}

Я не могу получить значение refresh_token от SalesForce. Я думаю, именно поэтому мой OAuth2AccessToken не имеет срока годности. Когда я вызываю getExpiration, чтобы увидеть дату, она становится нулевой.

Так что я могу сделать здесь? Есть ли какая-либо другая конфигурация, которую мне здесь не хватает? Мне не нравится продолжать взламывать фреймворк, когда он должен обрабатывать все для меня, особенно приобретать новый токен, когда он истекает.

1 Ответ

0 голосов
/ 20 марта 2020

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

Очевидно, SalesForce может быть настроен с ответом refreshtoken, когда вы получаете токен, но в моем случае я не получил тот токен. Так что в любом случае. Чтобы работать с чем-то, что напоминает стратегию обновления, я создал объект Date в качестве компонента в своем приложении Spring:

@Bean
    public Date expiryDate() {
    ... Date configuration here ....

Дата будет когда-то в будущем

А затем всякий раз, когда вам нужно проверить срок действия, вы просто проверяете, превышает ли сегодняшняя дата дату из bean-компонента expiryDate. Таким образом, вы можете избежать фреймворка Spring OAUTH2 для получения нового маркера доступа с сервера каждый раз. Это своего рода взломанное решение (я знаю), но это способ сэкономить слишком много вызовов.

...