2016-03-04 48 views
0

兩個服務時,是.......我現在用Netflix的堆疊[尤里卡/ zuul。InvalidGrantException,無效的授權碼運行2春天的OAuth服務器

  1. 匯聚器服務
  2. USER-SERVICE [春季OAUTH]

當我運行用戶的服務的一個實例的一切工作正常,但是當我在另一臺服務器上運行的另一個實例我得到下面提到的錯誤和請求[login oauth]失敗。

我要縮放USER-SERVICE它使用OAuth的春天。

Handling error: InvalidGrantException, Invalid authorization code: Q1j7Hs 06:24:17.253 [http-nio-8081-exec-2] INFO o.s.s.o.p.e.TokenEndpoint - Handling error: InvalidGrantException, Invalid authorization code: w9uvl1

任何意見或建議,將不勝感激。

回答

0

如果你有兩個實例,你要小心了,一個客戶端總是會談到同一個實例。否則,客戶端可能使這種情況下的第一個請求,以實例的進一步請求,例如B.

Normaly的客戶端連接到轉發到你的服務的情況下,負載平衡器。

比你要選擇:

  1. 配置負載平衡器到客戶端始終連接到相同的實例,這就是用粘會議一樣。
  2. 讓實例例如分享他們的會議在reddis店 看到這裏spring session
+0

謝謝。我們使用redis是因爲我們無法使用粘性會話。 – cody123

1

配置AuthorizationServerConfiguration所有認證節點之間使用JdbcAuthorizationCodeServices服務來存儲和共享授權碼通過數據庫。

@Configuration 
@EnableAuthorizationServer 
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter implements EnvironmentAware { 

    @Inject 
    private DataSource dataSource; 

    @Bean 
    public TokenStore tokenStore() { 
     return new JdbcTokenStore(dataSource); 
    } 

    // JdbcAuthorizationCodeServices stores authentication codes in a database. 
    @Bean 
    public JdbcAuthorizationCodeServices jdbcAuthorizationCodeServices() { 
     return new JdbcAuthorizationCodeServices(dataSource); 
    } 

    @Inject 
    @Qualifier("authenticationManagerBean") 
    private AuthenticationManager authenticationManager; 

    @Override 
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { 
     endpoints 
      .tokenStore(tokenStore()) 
      .reuseRefreshTokens(false) 
      .authenticationManager(authenticationManager) 
      .authorizationCodeServices(jdbcAuthorizationCodeServices()); 
    } 
} 

,創造oauth_code表:

CREATE TABLE oauth_code (
    code VARCHAR(256), authentication LONGVARBINARY 
);