2017-11-22 16 views
0

Java SpringフレームワークでREST Webサービスを実装しました。私のアプリケーションは、他のURLリクエストを行うためにアクセストークンを取得する必要があります。私は期限が切れるまでそれを再利用できるようにトークンをキャッシュしたいと思います。今のところ、トークンを格納するフィールドを使用していますが、スプリングセキュリティクラスを使用する別の方法がありますか?Spring Oauth2を使用したキャッシュアクセストークン

これは私がaccesTokenを取得する方法である:

@Bean 
private OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails() { 
    ClientCredentialsResourceDetails details = new 
    ClientCredentialsResourceDetails(); 
    details.setClientId(clientId); 
    details.setClientSecret(clientSecret); 
    accessTokenUrl = BackEndUrl + "/oauth2/token"; 
    details.setAccessTokenUri(accessTokenUrl); 
    return details; 
} 

@Bean 
private OAuth2RestTemplate createRestTemplate(OAuth2ClientContext clientContext) { 
    return new OAuth2RestTemplate(oAuth2ProtectedResourceDetails(), clientContext); 
} 

@Override 
public ResponseEntity<String> service() { 

    // Token recovery if no token has been created or if the token expiration time is exceeded 
    if (this.strToken == null || this.tokenLimitTime.isBeforeNow()) { 
     OAuth2ClientContext context = new DefaultOAuth2ClientContext(); 

     OAuth2RestTemplate restTemplate = createRestTemplate(context); 

     OAuth2AccessToken token = restTemplate.getAccessToken(); 

     if (token != null) { 
      this.strToken = token.getValue(); 
      this.tokenLimitTime = DateTime.now().plusSeconds(token.getExpiresIn()); 
     } 
    } 

答えて

0

それはあなたが使用しているストアをトークンいるに依存します。たとえば、InMemoryTokenStoreまたはJDBCTOkenStoreを使用している場合、ユーザー名またはクライアントID(つまりpublic Collection<OAuth2AccessToken> findTokensByClientIdAndUserName(String clientId, String userName)またはpublic Collection<OAuth2AccessToken> findTokensByClientId(String clientId))を使用してトークンにアクセスするためのAPIが用意されています。

JwtTokenStoreを使用している場合は、ApprovalStoreメカニズムがあります。

+0

これらのストアは、渡されたトークンを追跡するためにOAuthで保護されたサーバーで使用されるように見えます。元の質問は、クライアント上でトークンをキャッシュする方法を参照していると思います。 –

関連する問題