动态地将参数添加到oauth2中的userAuthorizationUri

时间:2017-07-24 00:23:54

标签: spring spring-boot spring-security google-api spring-security-oauth2

有时用户在本地数据库中的刷新令牌变得陈旧。为了补充,我正在尝试在进行oauth2调用时添加prompt=consent param。我在我的配置类和@Autowire AuthorizationCodeAccessTokenProvider中尝试afterPropertiesSet我正在做setTokenRequestEnhancer然后意识到当我查看以下代码时,这个bean甚至都没有通过spring容器进行初始化OAuth2RestTemplate

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

1 个答案:

答案 0 :(得分:2)

不幸的是,我还没有找到优雅的解决方案。但是,我注意到重定向是由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