有时用户在本地数据库中的刷新令牌变得陈旧。补充我试图在进行oauth2调用时添加prompt=consent
param。我在我的配置类和@Autowire AuthorizationCodeAccessTokenProvider
中尝试afterPropertiesSet
我正在做一个setTokenRequestEnhancer
然后意识到当我在OAuth2RestTemplate
中查看以下代码时,这个bean甚至没有通过spring容器进行初始化
private AccessTokenProvider accessTokenProvider = new AccessTokenProviderChain(Arrays.<AccessTokenProvider> asList(
new AuthorizationCodeAccessTokenProvider(), new ImplicitAccessTokenProvider(),
new ResourceOwnerPasswordAccessTokenProvider(), new ClientCredentialsAccessTokenProvider()));
搜索是否有任何弹簧代码调用org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.setAuthorizationRequestEnhancer(RequestEnhancer)
来学习如何访问它,但没有人调用它。
问题:如何在进行oauth2调用时动态地向userAuthorizationUri
添加一个参数?
不幸的是,我也没有找到一个优雅的解决方案。但是,我注意到重定向是由UserRedirectRequiredException
触发的。
通过注册自动修改此异常的自定义过滤器,我能够动态添加请求参数。
@Component
@Order(-102)
public class EnhanceUserRedirectFilter implements Filter {
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
try {
chain.doFilter(request, response);
} catch (final UserRedirectRequiredException ex) {
ex.getRequestParams().put("prompt", "consent");
throw ex;
}
}
@Override
public void destroy() {
}
}
请注意,此类servlet过滤器必须具有比Spring Security更高的优先级。在我的例子中,-102的优先级高于Spring Security的默认值-100。