0

我有一个关于 Spring Boot 的项目,我需要通过 Twitter 实现授权。

还有什么比这更简单的?- 我问自己,然后我被困了几天。

问题是我尝试过的大多数库(监听 /connect/twitter 或 /signin/twitter)都返回相同的响应

Invalid cookie header: "set-cookie: personalization_id=""; Expires=Tue, 28 Jul 2020 20:04:39 GMT; Path=/; Domain=.twitter.com". Invalid 'expires' attribute: Tue, 28 Jul 2020 20:04:39 GMT

我的注意力被这句话吸引了:

Invalid 'expires' attribute

这可以通过配置 RestTemplate 来解决,但问题是它在配置中深度创建并被私有 final 字段隐藏。我认为应该有一个比玩反射 API 更好的决定,我只是不明白

也许有人可以通过 Twitter 提出正确的授权方式。

测试版本:

  • Spring Boot 版本从 1.5.14 到 2.0.3
  • org.springframework.social:spring-social-twitter 从 1.1.2 到 2.0.0.M4
  • spring-boot-starter-social-twitter 高达 2.0.0.M4

PS Facebook 与 spring-security-oauth2-jose 和 spring-security-oauth2-client 完美配合,但 twitter 未配置为其中的提供者

必须为客户端注册“twitter”指定提供者 ID

4

2 回答 2

0

使用它来配置您的 RestTemplate Bean 以使用标准 cookie 规范

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate(getClientHttpRequestFactory());
}

private HttpComponentsClientHttpRequestFactory getClientHttpRequestFactory() {
    HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
    clientHttpRequestFactory.setHttpClient(getHttpClient());
    return clientHttpRequestFactory;
}

private HttpClient getHttpClient() {
    return HttpClients.custom()
            .setDefaultRequestConfig(RequestConfig.custom()
            .setCookieSpec(CookieSpecs.STANDARD).build())
            .build();
}
于 2019-08-28T13:23:44.303 回答
0

这听起来像您需要配置RestTemplate以使用标准 cookie 规范。这可以通过在 上设置 cookieSpecRequestConfig.Builder然后通过HttpComponentsClientHttpRequestFactory最终创建RestTemplate. 像这样的东西:

@Bean
public RestTemplate restTemplate() {
    RequestConfig requestConfig = RequestConfig.custom()
        .setCookieSpec(CookieSpecs.STANDARD)
        .build();
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.mergeRequestConfig(requestConfig);

    return new RestTemplate(factory);
}

抱歉,目前我没有可用的 IDE/javac,所以这可能无法编译。

于 2018-07-29T21:18:30.607 回答