2 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個贊
OAuth2RestTemplate
將自動刷新令牌。RestTemplate
不會(刷新令牌是 OAuth2 規(guī)范的一部分,因此 OAuth2RestTemplate.
您有 2 個選擇:
使用 Spring Security OAuth2 模塊,一切都會開箱即用(Spring 提供的配置屬性)
基于 Spring 的 OAuth2RestTemplate 創(chuàng)建你自己的 RestTemplate
Spring 的 OAuth2 模塊將來會集成到 Spring Security 中。我會選擇選項(xiàng) 1。

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個贊
OAuth2RestTemplate應(yīng)該在RestTemplate需要 JWT 身份驗(yàn)證時(shí)使用,而不是使用。您可以設(shè)置AccessTokenProvider為它,它將告訴如何檢索 JWT 令牌:oAuth2RestTemplate.setAccessTokenProvider(new MyAccessTokenProvider());
在類實(shí)現(xiàn)中,AccessTokenProvider您需要實(shí)現(xiàn)obtainAccessToken和refreshAccessToken方法。所以在obtainAccessToken方法中可以檢查令牌是否過期,如果是 - 令牌通過refreshAccessToken. 示例實(shí)現(xiàn)(沒有實(shí)際令牌檢索和刷新的細(xì)節(jié)):
public class MyAccessTokenProvider implements AccessTokenProvider {
@Override
public OAuth2AccessToken obtainAccessToken(OAuth2ProtectedResourceDetails details, AccessTokenRequest parameters)
throws UserRedirectRequiredException, UserApprovalRequiredException, AccessDeniedException {
if (parameters.getExistingToken() != null && parameters.getExistingToken().isExpired()) {
return refreshAccessToken(details, parameters.getExistingToken().getRefreshToken(), parameters);
}
OAuth2AccessToken retrievedAccessToken = null;
//TODO access token retrieval
return retrievedAccessToken;
}
@Override
public boolean supportsResource(OAuth2ProtectedResourceDetails resource) {
return false;
}
@Override
public OAuth2AccessToken refreshAccessToken(OAuth2ProtectedResourceDetails resource,
OAuth2RefreshToken refreshToken, AccessTokenRequest request)
throws UserRedirectRequiredException {
OAuth2AccessToken refreshedAccessToken = null;
//TODO refresh access token
return refreshedAccessToken;
}
@Override
public boolean supportsRefresh(OAuth2ProtectedResourceDetails resource) {
return true;
}
}
沒有找到 SpringrefreshAccessToken自動調(diào)用的方法,如果有人知道如何做到這一點(diǎn) - 請分享。
添加回答
舉報(bào)