有两个服务。我正在使用Netflix堆栈[Eureka / zuul]。
当我运行一个用户服务实例时一切正常但是当我在另一台服务器上运行另一个实例时,我收到下面提到的错误并且请求[login oauth]失败。
我想扩展使用spring oauth的USER-SERVICE。
处理错误:InvalidGrantException,无效的授权码: Q1j7Hs 06:24:17.253 [http-nio-8081-exec-2]信息 o.s.s.o.p.e.TokenEndpoint - 处理错误:InvalidGrantException, 授权码无效:w9uvl1
任何线索或建议都将受到赞赏。
答案 0 :(得分:3)
配置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
);
答案 1 :(得分:0)
如果您有两个实例,则必须注意,一个客户端始终与同一实例进行通信。否则,客户端可能会向实例A发出第一个请求,并进一步请求实例B.
Normaly在这种情况下,客户端连接到负载均衡器,转发到您的服务实例。
比你必须选择: