0
我試圖找到解決方案很長一段時間,但沒有找到任何有用的東西。 現在,直接問題。OAuth2RestTemplate提供的訪問令牌已過期
我必須使用遠程OAuth2身份驗證服務器,並且我擁有使用它的憑據。身份驗證用於REST服務調用。 REST服務在15分鐘內被調用,我們的應用程序在一次迭代中調用多個URL。
REST API第一次被調用,一切都很好,我們獲得訪問令牌並且它很有用。 1小時後,當訪問令牌過期和REST API再次調用,我們得到以下錯誤後:
The access token provided has expired
顯示此錯誤有時一次,有時兩次或更多次。 再過15分鐘後,REST API調用再次無誤。
我試圖使用屬性retryBadAccessTokens
,但沒有運氣。 我們使用spring-security-oauth2-2.0.8.RELEASE
,設置如下:
<bean id="oipRestTemplate" class="org.springframework.security.oauth2.client.OAuth2RestTemplate" scope="prototype">
<constructor-arg ref="oipClientCredentialsResourceDetail"/>
<property name="accessTokenProvider" ref="tokenProvider"/>
<property name="requestFactory" ref="httpComponentsClientHttpRequestFactory"/>
<property name="retryBadAccessTokens" value="true"/>
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" >
<property name="supportedMediaTypes">
<list>
<bean class="org.springframework.http.MediaType">
<constructor-arg value="application" />
<constructor-arg value="json" />
</bean>
</list>
</property>
</bean>
</list>
</property>
<property name="errorHandler">
<bean class="our.company.app.holders.MyResponseErrorHandler" />
</property>
</bean>
響應:「{ 」token_type「: 」承載「 」的access_token「: 」very_long_token「, 」expires_in「:1250 }」 – Worsik
呀,你是不是給一個刷新令牌。就像我說的,如果你每15分鐘撥打一次電話,只需要一個新電話。相信我,它不會傷害服務器。 –
現在看起來好了。在每次迭代開始時,我通過'oipRestTemplate.getOAuth2ClientContext()。從OAuth2ClientContext中刪除訪問令牌。setAccessToken(null);' – Worsik