我正在尝试在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”相同的方式配置(在请求中正确设置),但我找不到如何。
有人设法做到这一点吗?
答案 0 :(得分:1)
我发现:最简单的方法是使用Interceptor并将其添加到ConnectController。您可以在那里添加任何您喜欢的参数。 或升级到具有自动状态参数处理功能的spring social 1.1.0(目前处于RC1阶段)。