我有一个弹簧启动控制器,可以在wso2上调用服务。 (发送身份并接收令牌以进行进一步通信)。我正在寻找一种在Spring引导端自动刷新令牌的方法(因为wso2上的服务调用不是由浏览器完成的,而是由另一个服务完成的)。 那么,在弹簧靴方面,我该如何实现呢?我知道我应该检查access_token的到期日期并使用refresh_token来接收新的access_token,但是有一些库可以做到这一点,还是我必须自己编写这个逻辑?此外,在多个spring boot实例上运行我的应用程序时,如何使用相同的令牌阻止令牌从一个实例刷新并使另一个实例上的令牌无效?
答案 0 :(得分:0)
OAuth2提供了五种获取访问令牌的授权。其中之一是刷新令牌授权,用于在客户端被授权访问并且令牌已过期后获取新的访问令牌。在刷新令牌授权中,客户端使用以下参数向授权服务器发送public Map<String, Object> findData(){
List prmtrsList = new ArrayList();
prmtrsList.add(new SqlParameter(Types.VARCHAR));
prmtrsList.add(new SqlParameter(Types.VARCHAR));
prmtrsList.add(new SqlOutParameter("result", Types.VARCHAR));
Map<String, Object> resultData = jdbcTemplate.call(new CallableStatementCreator() {
@Override
public CallableStatement createCallableStatement(Connection connection)
throws SQLException {
CallableStatement callableStatement = connection.prepareCall("{call STORED_PROC(?, ?, ?)}");
callableStatement.setString(1, "first");
callableStatement.setString(2, "last");
callableStatement.registerOutParameter(3, Types.VARCHAR);
return callableStatement;
}
}, prmtrsList);
return resultData;
}
请求:
POST
首次获取令牌时,auth url应该相同。要自动刷新令牌,您可以在访问资源服务器时检查grant_type=refresh_token&client_id=your_client_id&client_secret=your_client_secret
&refresh_token=your_refresh_token_from_the_first_grant
并检查状态代码是否为HttpClientErrorException
。如果是,则发送新令牌请求。
HttpStatus.UNAUTHORIZED
对于客户端的多个实例,这可能会对您有所帮助:Spring Oauth2 - multiple tokens per client id
我还没有验证它,但实质上它使用post参数中的范围为同一个client_id生成不同的标记。