春天社交不发送"州"参数与oAuth2

时间:2014-03-28 17:21:13

标签: oauth-2.0 linkedin spring-social

我正在尝试在Spring应用程序中实现Linkedin社交登录;我正在使用最新发布的spring-social-linkedin-1.0.0.RC4和spring-social-1.0.3.RELEASE。

我设法达到授权链接发送到Linkedin的地步:

https://www.linkedin.com/uas/oauth2/authorization?client_id=....&response_type=code&redirect_uri=....

但请求是在没有强制“state”请求参数的情况下发送的,因此总是会导致Linkedin出错。我仔细检查过,只需将缺少的参数手动添加到te url,就可以得到来自linkedin的正确登录页面,所以我知道客户端ID是对的。

这是我用来连接到Linkedin的代码:

User principal = (User)  SecurityContextHolder.getContext().getAuthentication().getPrincipal();
ConnectionRepository repository = usersConnectionRepository.createConnectionRepository(principal.getUsername());
Connection<LinkedIn> connection = repository.findPrimaryConnection(LinkedIn.class);
    return connection.getApi();

connectionFactoryLocator的配置,其中占位符被正确解析:

<bean id="connectionFactoryLocator"
    class="org.springframework.social.connect.support.ConnectionFactoryRegistry">
    <property name="connectionFactories">
        <list>
            <bean
                class="org.springframework.social.linkedin.connect.LinkedInConnectionFactory">
                <constructor-arg value="${linkedin.api.key}" />
                <constructor-arg value="${linkedin.api.secret}" />
            </bean>
        </list>
    </property>
</bean>

其他所有内容都是由本书配置的,它是非常标准的spring social + jdbc设置。 我认为“state”和“scope”参数应该以与“api.key”和“api.secret”相同的方式配置(在请求中正确设置),但我找不到如何。

有人设法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

我发现:最简单的方法是使用Interceptor并将其添加到ConnectController。您可以在那里添加任何您喜欢的参数。 或升级到具有自动状态参数处理功能的spring social 1.1.0(目前处于RC1阶段)。