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

问题描述 投票:1回答:1

有时用户在本地数据库中的刷新令牌变得陈旧。补充我试图在进行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添加一个参数?

spring spring-boot spring-security google-api spring-security-oauth2
1个回答
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。

© www.soinside.com 2019 - 2024. All rights reserved.